Hibernate

Propaganda
Hibernate
Raquel Defelippo Rodrigues
Hibernate é um framework usado para
persistir objetos Java em tabelas de
banco de dados relacionais.
Por quê
quê precisamos
precisamos do
do Hibernate?
Hibernate?
Por
Trabalhamos com
Modelo Relacional
Universidade
1
+
N
Departamento
1
1
Endereço
Java + Modelo Relacional
H
I
B
E
R
N
A
T
E
Modelo Relacional
Universidade
1
N
Departamento
1
1
Endereço
Java + Modelo Relacional
H
I
B
E
R
N
A
T
E
O Hibernate é um
mapeamento objeto/relacional .
Modelo Relacional
Universidade
1
N
Departamento
1
1
Endereço
Mas
Mas oo que
que éé ORM
ORM ??
(Mapeamento
(Mapeamento Objeto/Relacional)
Objeto/Relacional)
ORM
„
„
ORM é um meio de persistir objetos de um
aplicativo Java em tabelas de bancos de
dados relacionais, de maneira transparente.
Hibernate é uma solução open source de
ORM.
Onde se localiza o Hibernate?
Arquitetura em camadas
de projetos OO
Camada de Apresentação
Camada de Regras de
Negócio
Hibernate
Camada de Persistência
Banco de
Dados
Classes
de
Utilidade
e
Assistente
Abstração do SGBD
„ O Hibernate está localizado entre o JDBC e a
aplicação.
„ Caso seja preciso mudar o SGBD de sua
aplicação basta apenas alterar o driver usado
e sua referência no arquivo hibernate.cfg.xml.
Como é a Arquitetura do
Hibernate?
Arquitetura do Hibernate
Camada de Negócio
Classes de
Persistência
Ciclo de Vida
Interceptor
Tipo de usuário
Tabela de Validação
Camada de Persistência
Sessão
Fábrica de Sessões
Transação
JNDI
Hibernate API
JDBC
Configuração
Consulta
JTA
J2EE API
Arquitetura do Hibernate
Camada de Negócio
Classes de
Persistência
Ciclo de Vida
Tabela de Validação
Camada de Persistência
Sessão
Fábrica de Sessões
Transação
Responsáveis
JNDI
Responsáveispor
por
executar
executaroperações
operaçõesde
de
criação,
Hibernate API
criação,deleção,
deleção,consulta
consulta
eeatualização
atualizaçãono
noBD
BD
Mantém
Mantémoomapeamento
mapeamento
objeto/relacional
na
objeto/relacional
Interceptor na
memória.
memória.Permite
Permiteaa
criação
de
Sessão.
de usuário
criaçãoTipo
deobjetos
objetos
Sessão.
JDBC
Configuração
Consulta
JTA
Utilizada
Utilizadapara
para
J2EE API o Hibernate
configurar
configurar o Hibernate
Responsáveis
Responsáveispor
porrealizar
realizar
aainteração
interaçãoentre
entreosos
eventos
eventosdo
doHibernate
Hibernateeeaa
aplicação.
aplicação.
Arquitetura do Hibernate
Camada de Negócio
Classes de
Persistência
Ciclo de Vida
Interceptor
Tipo de usuário
Tabela de Validação
Camada de Persistência
Sessão
Transação
JNDI
Hibernate API
JDBC
Consulta
Permite
aade
extensão
Fábrica
Sessões
Permite
extens
ãodas
das
funcionalidades
funcionalidadesdo
do
Configuração
mapeamento
mapeamentodo
do
Hibernate
Hibernate
JTA
J2EE API
Arquitetura do Hibernate
Camada de Negócio
Classes de
Persistência
Ciclo de Vida
Tabela de Validação
Interceptor
Tipo de usuário
Camada de Persistência
Sessão
JNDI
Fábrica de Sessões
São
Sãoaquelas
aquelasclasses
classesque
que
implementam
asas
Configuração
Transação implementam
Consulta
entidades
entidadesdomínio
domíniode
de
negócios.
JDBCnegócios.
JTA
Hibernate API
J2EE API
Arquitetura do Hibernate
Classes de Persistência
„
„
„
O Hibernate trabalha associando cada tabela do
banco de dados a um POJO.
O Hibernate persiste as propriedades no estilo
JavaBeans;
É importante que, ao utilizar o Hibernate, todos
os objetos persistentes possuam um identificador
e que estes sejam independentes da lógica de
negócio da aplicação.
Arquitetura do Hibernate
Escolhas das chaves primárias
„
„
„
Chaves primárias naturais, como por exemplo CPF
para a tabela Pessoa, devem ser evitadas.
Recomenda-se fortemente que as chaves primárias
das tabelas sejam sintéticas, ou seja, não possuam
significados de negócios .
O Hibernate apresenta vários mecanismos
internos para a geração de chaves primárias.
„
Por exemplo, sequence que mapeia uma seqüência
no PostegreSQL.
Como é a instalação do Hibernate?
Preparando o ambiente
„
„
„
„
Passo 1:
Instalação do SGBD PostegreSQL;
Passo 2:
Instalação da IDE Eclipse;
Passo 3:
Instalação do Hibernate;
Passo 4:
Configuração do Hibernate;
Passo 1:
Instalação do PostegreSQL
1.
2.
3.
4.
5.
6.
7.
Entre no site www.postegresql.org
Clique em download Æ FTP mirros Æ Brazil Æ
win32 Æ postegresql-8.1.4-1.zip
Descompacte o arquivo baixado
Clique com o botão direito em postegre-8.1.msi e
escolha Æ instalar
Siga o passo a passo
Escolha a opção de Idioma = Português
Escolha: superusuário = admin e senha = admin
Passo 2:
Instalação da IDE Eclipse
1.
2.
3.
4.
5.
6.
Considerando que já exista um ambiente para
programação em Java devidamente instalado;
Entre no site http://www.eclipse.org/
Clique em downloads Æ download now:
Eclipse SDK 3.2
Escolha Æ [Brazil] PUCPR (ftp)
Salvar o arquivo eclipse-SDK-3.2-win32.zip
Descompactar o arquivo eclipse-SDK-3.2win32.zip
Passo 3:
Instalação do Hibernate
1.
2.
3.
4.
Entre no site http://www.hibernate.org/
Clique em downloads Æ Hibernate Core Æ
Download Æ hibernate-3.1.3.zip Æ Curitiba,
Brazil Æ Download
Descompacte o arquivo baixado (hibernate3.1.3.zip)
Observe que a documentação está localizada em
hibernate-3.1.3\hibernate-3.1\doc\reference\em\html\index.html
Passo 4:
Configuração do Hibernate
A configuração do Hibernate será apresentada
através de um exemplo prático.
Configuração do Hibernate
Exemplo
1.
2.
3.
4.
5.
Criar o banco de dados Universidades com as 3 tabelas:
Universidade, Departamento e Endereço.
Configurar o Hibernate.
Criar os arquivos ORM que relacionam as propriedades do
objeto aos campos da tabela.
Criar os arquivos de configuração .xml contendo as
propriedades para que o Hibernate se conecte ao banco de
dados.
Testar o que foi feito.
Configuração do Hibernate
Exemplo
1. Criação do Banco de Dados
Configuração do Hibernate
Exemplo
Banco de Dados - Universidades
Configuração do Hibernate
Exemplo
Criando as seqüências usadas pelas chaves primárias
-- Sequence: universidade_id_universidade_seq
-- DROP SEQUENCE universidade_id_universidade_seq;
CREATE SEQUENCE universidade_id_universidade_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 2
CACHE 1;
ALTER TABLE universidade_id_universidade_seq OWNER TO
"admin";
Configuração do Hibernate
Exemplo
Criando as seqüências usadas pelas chaves primárias
-- Sequence: universidade_id_universidade_seq
-- DROP SEQUENCE universidade_id_universidade_seq;
CREATE SEQUENCE universidade_id_universidade_seq
INCREMENT 1
MINVALUE 1
-- Sequence:
departamento_id_departamento_seq
MAXVALUE
9223372036854775807
-- 2DROP SEQUENCE departamento_id_departamento_seq;
START
CREATE
SEQUENCE departamento_id_departamento_seq
CACHE
1;
INCREMENT
1
ALTER TABLE
universidade_id_universidade_seq
OWNER TO
MINVALUE
1
"admin";
MAXVALUE 9223372036854775807
START 2
CACHE 1;
ALTER TABLE departamento_id_departamento_seq OWNER TO
"admin";
Configuração do Hibernate
Exemplo
Criando as seqüências usadas pelas chaves primárias
-- Sequence: universidade_id_universidade_seq
-- DROP SEQUENCE universidade_id_universidade_seq;
CREATE SEQUENCE universidade_id_universidade_seq
INCREMENT 1
MINVALUE 1
-- Sequence:
departamento_id_departamento_seq
MAXVALUE
9223372036854775807
-- 2DROP SEQUENCE departamento_id_departamento_seq;
START
CREATE
SEQUENCE departamento_id_departamento_seq
CACHE
1;
INCREMENT
1
ALTER TABLE
universidade_id_universidade_seq
OWNER TO
MINVALUE
1
"admin";
-- Sequence:
endereco_id_endereco_seq
MAXVALUE
9223372036854775807
START--2 DROP SEQUENCE endereco_id_endereco_seq;
SEQUENCE endereco_id_endereco_seq
CACHECREATE
1;
INCREMENT
1
ALTER TABLE
departamento_id_departamento_seq
OWNER TO
MINVALUE
1
"admin";
MAXVALUE 9223372036854775807
START 2
CACHE 1;
ALTER
TABLE
endereco_id_endereco_seq
OWNER
"admin";
TO
Configuração do Hibernate
Exemplo
Criando as tabelas
-- Table: universidade
-- DROP TABLE universidade;
CREATE TABLE universidade
(
id_universidade int4 NOT NULL DEFAULT
nextval('universidade_id_universidade_seq'::regclass),
cnpj varchar NOT NULL,
razao_social varchar,
tipo varchar,
num_alunos int4,
CONSTRAINT universidade_pkey PRIMARY KEY (id_universidade),
CONSTRAINT universidade_cnpj_key UNIQUE(cnpj)
)
WITH OIDS;
ALTER TABLE universidade OWNER TO "admin";
Configuração do Hibernate
Exemplo
Criando as tabelas
-- Table: universidade
-- DROP TABLE universidade;
CREATE TABLE universidade
(
id_universidade int4 NOT NULL DEFAULT
nextval('universidade_id_universidade_seq'::regclass),
cnpj varchar NOT NULL,
razao_social varchar,
tipo varchar,
num_alunos int4,
CONSTRAINT universidade_pkey PRIMARY KEY (id_universidade),
-- Table: endereco
CONSTRAINT universidade_cnpj_key UNIQUE(cnpj)
-- DROP TABLE endereco;
)
CREATE TABLE endereco
WITH OIDS;
(
ALTER TABLE universidade OWNER TO "admin";
id_endereco int4 NOT NULL DEFAULT
nextval('endereco_id_endereco_seq'::regclass),
rua varchar,
cep varchar,
CONSTRAINT endereco_pkey PRIMARY KEY (id_endereco)
)
WITH OIDS;
ALTER TABLE endereco OWNER TO "admin";
Configuração do Hibernate
Exemplo
Criando as tabelas
-- Table: universidade
-- DROP--TABLE
universidade;
Table:
departamento
CREATE -TABLE
DROPuniversidade
TABLE departamento;
(
CREATE TABLE departamento
id_universidade
int4 NOT NULL DEFAULT
(
nextval('universidade_id_universidade_seq'::regclass),
id_departamento int4 NOT NULL DEFAULT
cnpj nextval('departamento_id_departamento_seq'::regclass),
varchar NOT NULL,
razao_social
varchar,
nome varchar,
tipo varchar,
id_universidade int4 NOT NULL,
num_alunos
int4,
id_endereco
int4,
CONSTRAINT
universidade_pkey
PRIMARYPRIMARY
KEY (id_universidade),
CONSTRAINT
departamento_pkey
KEY (id_departamento),
-- Table: endereco
CONSTRAINT
universidade_cnpj_key
UNIQUE(cnpj)
CONSTRAINT
departamento_fk
FOREIGN KEY (id_universidade)
-- DROP TABLE endereco;
)
REFERENCES
universidade
(id_universidade) MATCH SIMPLE
CREATE
TABLE endereco
WITH OIDS;
ON UPDATE( NO ACTION ON DELETE NO ACTION,
ALTER TABLE
universidade
OWNER TO "admin";
CONSTRAINT
departamento_fk1
FOREIGN
KEY (id_endereco)
id_endereco int4
NOT NULL
DEFAULT
REFERENCES
endereco
(id_endereco)
MATCH
SIMPLE
nextval('endereco_id_endereco_seq'::regclass),
ON UPDATE NO
ON DELETE NO ACTION,
ruaACTION
varchar,
CONSTRAINT departamento_id_endereco_key
UNIQUE (id_endereco)
cep varchar,
)
CONSTRAINT endereco_pkey PRIMARY KEY (id_endereco)
WITH OIDS;
)
ALTER TABLE departamento
WITH OIDS; OWNER TO "admin";
ALTER TABLE endereco OWNER TO "admin";
Configuração do Hibernate
Exemplo
2. Configurar o Hibernate
Configuração do Hibernate
Exemplo
Configuração do Ambiente
„
„
Crie um diretório de trabalho chamado workspace;
Crie um pacote chamado universidades. Escolha:
„
„
Add external JAR: importar os arquivos .jar de
hibernate-3.1.3\hibernate-3.1\lib
Add external JAR: importar hibernate3.jar de
hibernate-3.1.3\hibernate-3.1
Configuração do Hibernate
Exemplo
Configuração do Ambiente
„
„
„
„
„
Crie um pacote br.model.bean para os arquivos de
persistência;
Crie um pacote br.testes.hibernate onde ficarão os
arquivos de teste;
Crie um pacote br.testes.hibernate.persistence onde
ficará o arquivo HibernateFactory.java;
Importe postgresql-8.2dev-503.jdbc3.jar, que deve
também ser baixado do site www.postegresql.org;
O arquivo Hibernate.cfg.xml deverá ficar na raiz da
aplicação.
Configuração do Hibernate
Exemplo
3. Criação dos Arquivos ORM
Configuração do Hibernate
Exemplo
Arquivos ORM
„
Para cada tabela é necessário a criação dos
arquivos ORM;
„
O primeiro arquivo é uma classe de persistência
JAVA que deve ter:
„ Um
construtor padrão sem argumentos
„ Variáveis para cada atributo da tabela. Cada uma
destas variáveis deve possuir os métodos get e set;
„
O segundo arquivo possui a extensão .hbm.xml, e
faz o mapeamento entre os atributos das tabelas e
as variáveis das classes de persistência JAVA;
Configuração do Hibernate
Exemplo
Arquivos ORM
„
„
Mapeamento dos atributos
Mapeamento dos relacionamentos
Mapeamento dos Atributos
Universidade.java
package
package br.model.bean;
br.model.bean;
import
import java.util.HashSet;
java.util.HashSet;
import
java.util.Set;
import java.util.Set;
/**
/**
** Classe
Classe Universidade
Universidade -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
universidade.hbm.xml
Junto com universidade.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela universidade
universidade
*/
*/
public
public class
class Universidade
Universidade {{
......
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada
** uma
variavel
do
tipo
correspondente
uma variavel do tipo correspondente
*/
*/
private
private int
int id_universidade;
id_universidade;
private
String
private String cnpj;
cnpj;
private
String
razao_social;
private String razao_social;
private
private String
String tipo;
tipo;
private
int
num_alunos;
private int num_alunos;
Mapeamento dos Atributos
Universidade.java
...
...
}}
/**
/** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os
** metodos
get
e
set
metodos get e set
*/
*/
public
public String
String getCnpj()
getCnpj() {{
return
}}
return cnpj;
cnpj;
public
public void
void setCnpj(String
setCnpj(String cnpj)
cnpj) {{
this.cnpj
this.cnpj == cnpj;
cnpj;}}
public
public int
int getId_universidade()
getId_universidade() {{
return
return id_universidade;
id_universidade; }}
public
public void
void setId_universidade(int
setId_universidade(int id_universidade)
id_universidade) {{
this.id_universidade
}}
this.id_universidade == id_universidade;
id_universidade;
public
public String
String getRazao_social()
getRazao_social() {{
return
}}
return razao_social;
razao_social;
public
public void
void setRazao_social(String
setRazao_social(String razao_social)
razao_social) {{
this.razao_social
this.razao_social == razao_social;
razao_social; }}
public
public String
String getTipo()
getTipo() {{
return
}}
return tipo;
tipo;
public
public void
void setTipo(String
setTipo(String tipo)
tipo) {{
this.tipo
this.tipo == tipo;
tipo;}}
public
public int
int getNum_alunos()
getNum_alunos() {{
return
}}
return num_alunos;
num_alunos;
public
public void
void setNum_alunos(int
setNum_alunos(int num_alunos)
num_alunos) {{
this.num_alunos
}}
this.num_alunos == num_alunos;
num_alunos;
Mapeamento dos Atributos
Universidade.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Mapping
"-//Hibernate/Hibernate Mapping DTD
DTD 3.0//EN"
3.0//EN"
Nome
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
completo "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
Nome da
tabela
da classe
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Universidade"
name="br.model.bean.Universidade" table="universidade">
table="universidade">
Descrição
dos atributos
da Tabela
<id
<id name="id_universidade"
name="id_universidade"
Seqüência
column="id_universidade"
column="id_universidade"
criada pelo
type="integer">
PostgreSQL
type="integer">
<generator
class="sequence">
<generator class="sequence">
<param
<param name="sequence">universidade_id_universidade_seq</param>
name="sequence">universidade_id_universidade_seq</param>
</generator>
</generator>
</id>
</id>
<property
<property name="cnpj"
name="cnpj" type="string"/>
type="string"/>
<property
name="razao_social"
<property name="razao_social" column="razao_social"
column="razao_social" type="string"/>
type="string"/>
<property
name="tipo"
type="string"/>
<property name="tipo" type="string"/>
<property
<property name="num_alunos"
name="num_alunos" column="num_alunos"
column="num_alunos" type="integer"/>
type="integer"/>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
Nome da variável
na classe Java
Nome dos
atributos na
tabela
Tipo do
dado
Mapeamento dos Atributos
package
package br.model.bean;
br.model.bean;
Departamento.java
import
import br.model.bean.Universidade;
br.model.bean.Universidade;
import
br.model.bean.Endereco;
import br.model.bean.Endereco;
/**
/**
** Classe
Classe Departamento
Departamento -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
departamento.hbm.xml
Junto com departamento.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela departamento
departamento
*/
*/
public
public class
class Departamento
Departamento {{
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada uma
uma
** variavel
do
tipo
correspondente
variavel do tipo correspondente
*/
*/
private
private int
int id_departamento;
id_departamento;
private
String
private String nome;
nome;
/**
O
mapeamento
/** O mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os metodos
metodos get
get ee
** set
set
*/
*/
public
public int
int getId_departamento()
getId_departamento() {{
return
return id_departamento;
id_departamento; }}
public
public void
void setId_departamento(int
setId_departamento(int id_departamento)
id_departamento) {{
this.id_departamento
}}
this.id_departamento == id_departamento;
id_departamento;
public
public String
String getNome()
getNome() {{
return
}}
return nome;
nome;
public
public void
void setNome(String
setNome(String nome)
nome) {{
this.nome
}}
this.nome == nome;
nome;
}}
Mapeamento dos Atributos
Departamento.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Mapping
"-//Hibernate/Hibernate Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Departamento"
name="br.model.bean.Departamento" table="departamento">
table="departamento">
<id
<id name="id_departamento"
name="id_departamento"
column="id_departamento"
column="id_departamento"
type="integer">
type="integer">
<generator
<generator class="sequence">
class="sequence">
<param
name="sequence">departamento_id_departamento_seq</param>
<param name="sequence">departamento_id_departamento_seq</param>
</generator>
</generator>
</id>
</id>
<property
<property name="nome"
name="nome" type="string"/>
type="string"/>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
Mapeamento dos Atributos
Endereco.java
package
package br.model.bean;
br.model.bean;
/**
/**
** Classe
Classe Endereco
Endereco -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
endereco.hbm.xml
Junto com endereco.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela endereco
endereco
*/
*/
public
public class
class Endereco
Endereco {{
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada uma
uma
** variavel
do
tipo
correspondente
variavel do tipo correspondente
*/
*/
private
private int
int id_endereco;
id_endereco;
private
String
private String rua;
rua;
private
String
cep;
private String cep;
...
...
Mapeamento dos Atributos
Endereco.java
...
...
}}
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os metodos
metodos get
get
** ee set
set
*/
*/
public
public int
int getId_endereco(){
getId_endereco(){
return
}}
return id_endereco;
id_endereco;
public
public void
void setId_endereco(int
setId_endereco(int id_endereco){
id_endereco){
this.id_endereco
=
id_endereco;
}}
this.id_endereco = id_endereco;
public
public String
String getRua(){
getRua(){
return
}}
return rua;
rua;
public
public void
void setRua(String
setRua(String rua){
rua){
this.rua
=
rua;
}
this.rua = rua; }
public
String
public String getCep(){
getCep(){
return
}}
return cep;
cep;
public
public void
void setCep(String
setCep(String cep){
cep){
this.cep
=
cep;
}
this.cep = cep; }
Mapeamento dos Atributos
Endereco.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
"-//Hibernate/Hibernate Mapping
Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Endereco"
name="br.model.bean.Endereco" table="endereco">
table="endereco">
<id
<id name="id_endereco"
name="id_endereco"
column="id_endereco"
column="id_endereco"
type="integer">
type="integer">
<generator
<generator class="sequence">
class="sequence">
<param
<param name="sequence">endereco_id_endereco_seq</param>
name="sequence">endereco_id_endereco_seq</param>
</generator>
</generator>
</id>
</id>
<property
<property name="rua"
name="rua" type="string"/>
type="string"/>
<property
name="cep"
type="string"/>
<property name="cep" type="string"/>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
Configuração do Hibernate
Exemplo
Arquivos ORM
„
„
Mapeamento dos atributos
Mapeamento dos relacionamentos
Mapeamento dos Relacionamentos
Universidade.java
package
package br.model.bean;
br.model.bean;
import
import java.util.HashSet;
java.util.HashSet;
import
java.util.Set;
import java.util.Set;
/**
/**
** Classe
Classe Universidade
Universidade -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
universidade.hbm.xml
Junto com universidade.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela universidade
universidade
*/
*/
public
public class
class Universidade
Universidade {{
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada
** uma
variavel
do
tipo
correspondente
uma variavel do tipo correspondente
*/
*/
private
private int
int id_universidade;
id_universidade;
private
String
private String cnpj;
cnpj;
private
String
razao_social;
private String razao_social;
private
private String
String tipo;
tipo;
private
int
num_alunos;
private int num_alunos;
private
private Set
Set departamentos
departamentos == new
new HashSet();
HashSet();
//mapeia
o
relacionamento
//mapeia o relacionamento com
com aa tabela
tabela departamento
departamento
...
...
Mapeamento dos Relacionamentos
Universidade.java
...
...
...
...
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os metodos
metodos
** get
e
set
get e set
*/
*/
/**
/**
** OO mapeamento
mapeamento do
do relacionamento
relacionamento <1-para-N>
<1-para-N> com
com aa tabela
tabela
** departamento
é
feito
atraves
do
conjunto
de
departamentos
departamento é feito atraves do conjunto de departamentos
*/
*/
public
public Set
Set getDepartamentos(){
getDepartamentos(){
return
}}
return departamentos;
departamentos;
public
public void
void setDepartamentos(Set
setDepartamentos(Set departamentos){
departamentos){
this.departamentos
=
departamentos;
}}
this.departamentos = departamentos;
public
public void
void addDepartamentos(Departamento
addDepartamentos(Departamento departamento){
departamento){
departamento.setId_universidade(this);
departamento.setId_universidade(this);
departamentos.add(departamento);
departamentos.add(departamento); }}
}}
Mapeamento dos Relacionamentos
Universidade.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Mapping
"-//Hibernate/Hibernate Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Universidade"
name="br.model.bean.Universidade" table="universidade">
table="universidade">
…
…
O nome da coluna
da chave
estrangeira na
classe Universidade
<!-<!-- Mapeamento
Mapeamento da
da Colecao
Colecao de
de Departamentos
Departamentos -->
-->
<set
name="departamentos"
inverse="true"
lazy="true">
<set name="departamentos" inverse="true" lazy="true">
<key
<key column="id_universidade"
column="id_universidade" />
/>
<one-to-many
class="br.model.bean.Departamento"/>
<one-to-many class="br.model.bean.Departamento"/>
</set>
</set>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
Informa a classe a
qual pertence a
coleção de objetos
Mapeamento dos Relacionamentos
Departamento.java
package
package br.model.bean;
br.model.bean;
import
import br.model.bean.Universidade;
br.model.bean.Universidade;
import
br.model.bean.Endereco;
import br.model.bean.Endereco;
/**
/**
** Classe
Classe Departamento
Departamento -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
departamento.hbm.xml
Junto com departamento.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela departamento
departamento
*/
*/
public
public class
class Departamento
Departamento {{
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada uma
uma
** variavel
do
tipo
correspondente
variavel do tipo correspondente
*/
*/
private
private int
int id_departamento;
id_departamento;
private
String
private String nome;
nome;
public
Universidade
public Universidade id_universidade;
id_universidade;
//
mapeia
// mapeia oo relacionamento
relacionamento com
com aa tabela
tabela universidade
universidade
public
Endereco
id_endereco;
public Endereco id_endereco;
//
// mapeia
mapeia oo relacionamento
relacionamento com
com aa tabela
tabela endereco
endereco
/*
/* OO mapeamento
mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os metodos
metodos get
get ee
** set
set
*/
*/
...
...
Mapeamento dos Relacionamentos
Departamento.java
...
...
/**
/**
** OO mapeamento
mapeamento do
do relacionamento
relacionamento <N-para-1>
<N-para-1> com
com aa tabela
tabela universidade
universidade
** éé feito
atraves
do
objeto
id_universidade
da
classe
Universidade
feito atraves do objeto id_universidade da classe Universidade
*/
*/
public
public Universidade
Universidade getId_universidade()
getId_universidade() {{
return
return id_universidade;
id_universidade;
}}
public
public void
void setId_universidade(Universidade
setId_universidade(Universidade id_universidade){
id_universidade){
this.id_universidade
=
id_universidade;
this.id_universidade = id_universidade;
}}
/**
/**
** OO mapeamento
mapeamento do
do relacionamento
relacionamento <1-para-1>
<1-para-1> com
com aa tabela
tabela endereco
endereco
** éé feito
atraves
do
objeto
id_endereco
da
classe
Endereco
feito atraves do objeto id_endereco da classe Endereco
*/
*/
public
public Endereco
Endereco getId_endereco(){
getId_endereco(){
return
return id_endereco;
id_endereco;
}}
public
public void
void setId_endereco(Endereco
setId_endereco(Endereco id_endereco){
id_endereco){
this.id_endereco
=
id_endereco;
this.id_endereco = id_endereco;
}}
}}
Mapeamento dos Relacionamentos
Departamento.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Mapping
"-//Hibernate/Hibernate Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Departamento"
name="br.model.bean.Departamento" table="departamento">
table="departamento">
......
<!-<!-- Mapeamento
Mapeamento da
da Universidade
Universidade -->
-->
<many-to-one
name="id_universidade"
<many-to-one name="id_universidade"
class="br.model.bean.Universidade"
class="br.model.bean.Universidade"
column="id_universidade"
column="id_universidade" />
/>
Nome do
<!-<!-- Mapeamento
Mapeamento do
do Endereco
Endereco -->
-->
<many-to-one
name="id_endereco"
<many-to-one name="id_endereco"
class="br.model.bean.Endereco"
class="br.model.bean.Endereco"
column="id_endereco"
Coluna do banco
column="id_endereco"
(chave estrangeira)
unique="true"
unique="true" />
/>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
atributo na
classe Java
Não aceita
valores repetidos
Mapeamento dos Relacionamentos
Endereco.java
package
package br.model.bean;
br.model.bean;
/**
/**
** Classe
Classe Endereco
Endereco -- Parte
Parte integrante
integrante do
do esquema
esquema necessario
necessario para
para aa
** utilizacao
utilizacao do
do Hibernate
Hibernate
** Junto
com
endereco.hbm.xml
Junto com endereco.hbm.xml faz
faz oo mapeamento
mapeamento da
da tabela
tabela endereco
endereco
*/
*/
public
public class
class Endereco
Endereco {{
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada campo
campo da
da tabela
tabela seja
seja criada
criada uma
uma
** variavel
do
tipo
correspondente
variavel do tipo correspondente
*/
*/
private
private int
int id_endereco;
id_endereco;
private
String
private String rua;
rua;
private
String
cep;
private String cep;
...
...
Mapeamento dos Relacionamentos
Endereco.java
...
...
}}
/**
/**
** OO mapeamento
mapeamento exige
exige que
que para
para cada
cada variavel
variavel existam
existam os
os metodos
metodos get
get
** ee set
set
*/
*/
public
public int
int getId_endereco(){
getId_endereco(){
return
}}
return id_endereco;
id_endereco;
public
public void
void setId_endereco(int
setId_endereco(int id_endereco){
id_endereco){
this.id_endereco
=
id_endereco;
}}
this.id_endereco = id_endereco;
public
public String
String getRua(){
getRua(){
return
}}
return rua;
rua;
public
public void
void setRua(String
setRua(String rua){
rua){
this.rua
=
rua;
}
this.rua = rua; }
public
String
public String getCep(){
getCep(){
return
}}
return cep;
cep;
public
public void
void setCep(String
setCep(String cep){
cep){
this.cep
=
cep;
}
this.cep = cep; }
Mapeamento dos Relacionamentos
Endereco.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
"-//Hibernate/Hibernate Mapping
Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<class
<class name="br.model.bean.Endereco"
name="br.model.bean.Endereco" table="endereco">
table="endereco">
<id
<id name="id_endereco"
name="id_endereco"
column="id_endereco"
column="id_endereco"
type="integer">
type="integer">
<generator
<generator class="sequence">
class="sequence">
<param
<param name="sequence">endereco_id_endereco_seq</param>
name="sequence">endereco_id_endereco_seq</param>
</generator>
</generator>
</id>
</id>
<property
<property name="rua"
name="rua" type="string"/>
type="string"/>
<property
name="cep"
type="string"/>
<property name="cep" type="string"/>
</class>
</class>
</hibernate-mapping>
</hibernate-mapping>
OOmapeamento
mapeamentodo
do
relacionamento
(1:1)
relacionamento (1:1)com
comaa
tabela
Departamento
aparece
tabela Departamento aparece
apenas
apenaspara
paraaatabela
tabelaque
quecarrega
carrega
aachave
estrangeira.
chave estrangeira.
Configuração do Hibernate
Exemplo
4. Arquivos de Configuração
Configuração
Hibernate.cfg.xml
<?xml
<?xml version='1.0'
version='1.0' encoding='utf-8'?>
encoding='utf-8'?>
<!DOCTYPE
hibernate-configuration
<!DOCTYPE hibernate-configuration PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Configuration
"-//Hibernate/Hibernate Configuration DTD//EN"
DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<hibernate-configuration>
URL de
conexão
específica
do BD
Dialeto SQL
específico do
BD utilizado
<session-factory>
<session-factory>
<property
<property name="hibernate.dialect">
name="hibernate.dialect">
org.hibernate.dialect.PostgreSQLDialect</property>
org.hibernate.dialect.PostgreSQLDialect</property>
<property
<property name="connection.driver_class">
name="connection.driver_class">
Nome da classe do
org.postgresql.Driver</property>
org.postgresql.Driver</property>
driver JDBC do BD
<property
<property name="connection.url">
name="connection.url">
jdbc:postgresql://localhost:5432/universidades</property>
jdbc:postgresql://localhost:5432/universidades</property>
<property
<property name="connection.username">admin</property>
name="connection.username">admin</property>
<property
name="connection.password">admin</property>
<property name="connection.password">admin</property>
<property
<property name="show_sql">true</property>
name="show_sql">true</property>
Define se os
SQLs gerados
pelo Hibernate
devem ou não
ser exibidos
<mapping
<mapping resource="br/model/bean/universidade.hbm.xml"/>
resource="br/model/bean/universidade.hbm.xml"/>
<mapping
resource="br/model/bean/departamento.hbm.xml"/>
<mapping resource="br/model/bean/departamento.hbm.xml"/>
<mapping
<mapping resource="br/model/bean/endereco.hbm.xml"/>
resource="br/model/bean/endereco.hbm.xml"/>
<mapping
resource="br/model/bean/consultas.hbm.xml"/>
<mapping resource="br/model/bean/consultas.hbm.xml"/>
</session-factory>
</session-factory>
</hibernate-configuration>
</hibernate-configuration>
Nome de
usuário e senha
com o qual o
Hibernate deve
se comunicar
com o BD
Arquivos de
mapeamento
Configuração
HibernateFactory.java
package
package br.testes.hibernate.persistence;
br.testes.hibernate.persistence;
import
import org.hibernate.*;
org.hibernate.*;
import
org.hibernate.cfg.*;
import org.hibernate.cfg.*;
public
public class
class HibernateFactory
HibernateFactory {{
private
private static
static HibernateFactory
HibernateFactory factory;
factory;
private
static
Exception
exception;
private static Exception exception;
private
private SessionFactory
SessionFactory sessionFactory;
sessionFactory;
private
Session
session;
private Session session;
static
static {{
try
try {{
factory
factory == new
new HibernateFactory();
HibernateFactory();
}} catch(
Exception
catch( Exception ee )) {{
exception
exception == e;
e;
}}
}}
public
public HibernateFactory()
HibernateFactory() throws
throws Exception
Exception {{
setSessionFactory(
setSessionFactory( new
new
Configuration().configure().buildSessionFactory()
Configuration().configure().buildSessionFactory() );
);
setSession(
getSessionFactory().openSession()
setSession( getSessionFactory().openSession() );
);
}}
...
...
Configuração
HibernateFactory.java
...
...
public
public static
static HibernateFactory
HibernateFactory getInstance()
getInstance() throws
throws Exception
Exception {{
if(
if( factory
factory !=
!= null
null )) {{
return
return factory;
factory;
}} else
{
else {
Exception
Exception ee == new
new Exception(
Exception( exception
exception );
);
//"Error
initializing
hibernate.cfg.xml");
//"Error initializing hibernate.cfg.xml");
throw
throw e;
e;
}}
}}
}}
public
public SessionFactory
SessionFactory getSessionFactory()
getSessionFactory() {{
return
return sessionFactory;
sessionFactory;
}}
public
public void
void setSessionFactory(SessionFactory
setSessionFactory(SessionFactory sessionFactory)
sessionFactory) {{
this.sessionFactory
this.sessionFactory == sessionFactory;
sessionFactory;
}}
public
public Session
Session getSession()
getSession() {{
return
return session;
session;
}}
public
public void
void setSession(Session
setSession(Session session)
session) {{
this.session
this.session == session;
session;
}}
Configuração do Hibernate
Exemplo
4. Testes
Inserção
UniversidadeTeste.java
package
package br.testes.hibernate;
br.testes.hibernate;
import
org.hibernate.Session;
import org.hibernate.Session;
import
import br.model.bean.Universidade;
br.model.bean.Universidade;
import
br.testes.hibernate.persistence.HibernateFactory;
import br.testes.hibernate.persistence.HibernateFactory;
import
import org.hibernate.Transaction;
org.hibernate.Transaction;
/**
/**
** Classe
Classe UniversidadeTeste
UniversidadeTeste -- Utiliza
Utiliza oo Hibernate
Hibernate para
para persistir
persistir dados
dados na
na tabela
tabela
** universidade
universidade
*/
*/
public
public class
class UniversidadeTeste
UniversidadeTeste {{
public
public void
void saveUniversidade(
saveUniversidade( String
String umCnpj,
umCnpj, String
String umaRazao_social,
umaRazao_social,
String
umTipo,
int
umNum_alunos)
String umTipo, int umNum_alunos) {{
try
try {{
Session
Session session
session == HibernateFactory.getInstance().getSession();
HibernateFactory.getInstance().getSession();
Transaction
tx
=
session.beginTransaction();
Transaction tx = session.beginTransaction();
Universidade
Universidade universidade
universidade == new
new Universidade();
Universidade();
universidade.setCnpj(umCnpj);
universidade.setCnpj(umCnpj);
universidade.setRazao_social(umaRazao_social);
universidade.setRazao_social(umaRazao_social);
universidade.setTipo(umTipo);
universidade.setTipo(umTipo);
universidade.setNum_alunos(umNum_alunos);
universidade.setNum_alunos(umNum_alunos);
session.save(
session.save( universidade
universidade );
);
tx.commit();
tx.commit();
}}
}}
}} catch
catch (Exception
(Exception e)
e) {{ System.out.println(
System.out.println( ee );
); }}
Inserção
DepartamentoTeste.java
package
package br.testes.hibernate;
br.testes.hibernate;
import
org.hibernate.Session;
import org.hibernate.Session;
import
import br.model.bean.Universidade;
br.model.bean.Universidade;
import
br.model.bean.Departamento;
import br.model.bean.Departamento;
import
import br.model.bean.Endereco;
br.model.bean.Endereco;
import
br.testes.hibernate.persistence.HibernateFactory;
import br.testes.hibernate.persistence.HibernateFactory;
import
import org.hibernate.Transaction;
org.hibernate.Transaction;
/**
/**
** Classe
Classe DepartamentoTeste
DepartamentoTeste -- Utiliza
Utiliza oo Hibernate
Hibernate para
para persistir
persistir dados
dados na
na tabela
tabela
** departamento
departamento
*/
*/
public
public class
class DepartamentoTeste
DepartamentoTeste {{
public
public void
void saveDepartamento(
saveDepartamento( String
String umNome,
umNome, Universidade
Universidade umaUniversidade,
umaUniversidade,
Endereco
umEndereco)
{
Endereco umEndereco) {
try
{
try {
Session
Session session
session == HibernateFactory.getInstance().getSession();
HibernateFactory.getInstance().getSession();
Transaction
tx
=
session.beginTransaction();
Transaction tx = session.beginTransaction();
Departamento
Departamento departamento
departamento == new
new Departamento();
Departamento();
departamento.setNome(umNome);
departamento.setNome(umNome);
departamento.setId_universidade(umaUniversidade);
departamento.setId_universidade(umaUniversidade);
departamento.setId_endereco(umEndereco);
departamento.setId_endereco(umEndereco);
session.save(
session.save( departamento
departamento );
);
tx.commit();
tx.commit();
}} catch
catch (Exception
(Exception e)
e) {{ System.out.println(
System.out.println( ee );
); }}
}}
}}
Inserção
EnderecoTeste.java
package
package br.testes.hibernate;
br.testes.hibernate;
import
org.hibernate.Session;
import org.hibernate.Session;
import
import br.model.bean.Endereco;
br.model.bean.Endereco;
import
br.testes.hibernate.persistence.HibernateFactory;
import br.testes.hibernate.persistence.HibernateFactory;
import
import org.hibernate.Transaction;
org.hibernate.Transaction;
/**
/**
** Classe
Classe EnderecoTeste
EnderecoTeste -- Utiliza
Utiliza oo Hibernate
Hibernate para
para persistir
persistir dados
dados na
na tabela
tabela
** endereco
endereco
*/
*/
public
public class
class EnderecoTeste
EnderecoTeste {{
public
public void
void saveEndereco(
saveEndereco( String
String umaRua,
umaRua, String
String umCep)
umCep) {{
try
try {{
Session
Session session
session == HibernateFactory.getInstance().getSession();
HibernateFactory.getInstance().getSession();
Transaction
tx
=
session.beginTransaction();
Transaction tx = session.beginTransaction();
Endereco
Endereco endereco
endereco == new
new Endereco();
Endereco();
endereco.setRua(umaRua);
endereco.setRua(umaRua);
endereco.setCep(umCep);
endereco.setCep(umCep);
session.save(
session.save( endereco
endereco );
);
tx.commit();
tx.commit();
}} catch
catch (Exception
(Exception e)
e) {{ System.out.println(
System.out.println( ee );
); }}
}
}}
}}
Teste de Inserção
Insert.java
package
package br.testes.hibernate;
br.testes.hibernate;
import
br.model.bean.Universidade;
import br.model.bean.Universidade;
import
import br.model.bean.Departamento;
br.model.bean.Departamento;
import
br.model.bean.Endereco;
import br.model.bean.Endereco;
/**
/**
** Classe
Classe Insert
Insert -- Utiliza
Utiliza oo Hibernate
Hibernate para
para persistir
persistir dados
dados nas
nas tabelas
tabelas do
do
** banco
universidades
banco universidades
*/
*/
public
public class
class Insert
Insert {{
public
public static
static void
void main(String[]
main(String[] args)
args) throws
throws Exception
Exception {{
Universidade
Universidade universidade
universidade == new
new Universidade();
Universidade();
universidade.setId_universidade(2);
universidade.setId_universidade(2);
Endereco
Endereco endereco
endereco == new
new Endereco();
Endereco();
endereco.setId_endereco(3);
endereco.setId_endereco(3);
//UniversidadeTeste
//UniversidadeTeste teste1
teste1 == new
new UniversidadeTeste();
UniversidadeTeste();
//teste1.saveUniversidade("1234",
"UFRJ",
//teste1.saveUniversidade("1234", "UFRJ", "publica",
"publica", 30000);
30000);
//UniversidadeTeste
//UniversidadeTeste teste6
teste6 == new
new UniversidadeTeste();
UniversidadeTeste();
//teste6.saveUniversidade("4321",
"UERJ",
//teste6.saveUniversidade("4321", "UERJ", "publica",
"publica", 20000);
20000);
...
...
Teste de Inserção
Insert.java
...
...
//UniversidadeTeste
//UniversidadeTeste teste7
teste7 == new
new UniversidadeTeste();
UniversidadeTeste();
//teste7.saveUniversidade("111",
"PUC
//teste7.saveUniversidade("111", "PUC Rio",
Rio", "privada",
"privada", 15000);
15000);
//EnderecoTeste
//EnderecoTeste teste3
teste3 == new
new EnderecoTeste();
EnderecoTeste();
//teste3.saveEndereco("Rua
A",
//teste3.saveEndereco("Rua A", "22.290-000");
"22.290-000");
//EnderecoTeste
//EnderecoTeste teste4
teste4 == new
new EnderecoTeste();
EnderecoTeste();
//teste4.saveEndereco("Rua
B",
//teste4.saveEndereco("Rua B", "22.290-000");
"22.290-000");
//DepartamentoTeste
//DepartamentoTeste teste2
teste2 == new
new DepartamentoTeste();
DepartamentoTeste();
//teste2.saveDepartamento("DCC",
universidade,
//teste2.saveDepartamento("DCC", universidade, endereco);
endereco);
DepartamentoTeste
DepartamentoTeste teste5
teste5 == new
new DepartamentoTeste();
DepartamentoTeste();
teste5.saveDepartamento("MAT",
universidade,
teste5.saveDepartamento("MAT", universidade, endereco);
endereco);
}}
}}
Teste de Seleção
consultas.hbm.xml
<?xml
<?xml version="1.0"?>
version="1.0"?>
<!DOCTYPE
<!DOCTYPE hibernate-mapping
hibernate-mapping PUBLIC
PUBLIC
"-//Hibernate/Hibernate
Mapping
"-//Hibernate/Hibernate Mapping DTD
DTD 3.0//EN"
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<hibernate-mapping>
<!-<!-- Recupera
Recupera todos
todos as
as Universidades
Universidades -->
-->
<query
name="Universidades">
<query name="Universidades">
<![CDATA[from
<![CDATA[from Universidade
Universidade uni
uni
order
by
uni.razao_social]]>
order by uni.razao_social]]>
</query>
</query>
<!-<!-- Recupera
Recupera oo nome
nome da
da Universidade
Universidade dado
dado seu
seu cnpj
cnpj -->
-->
<query
name="UniversidadePorCnpj">
<query name="UniversidadePorCnpj">
<![CDATA[from
<![CDATA[from Universidade
Universidade uni
uni
where
uni.cnpj
=
:cnpj]]>
where uni.cnpj = :cnpj]]>
</query>
</query>
...
...
Teste de Seleção
consultas.hbm.xml
...
...
<!-<!-- Recupera
Recupera os
os departamentos
departamentos de
de uma
uma Universidade
Universidade dado
dado seu
seu cnpj
cnpj -->
-->
<query
name="DepartamentosPorCnpj">
<query name="DepartamentosPorCnpj">
<![CDATA[from
<![CDATA[from Departamento
Departamento dep,
dep, Universidade
Universidade uni
uni
where
dep.id_universidade
=
uni.id_universidade
where dep.id_universidade = uni.id_universidade
and
and uni.cnpj
uni.cnpj == :cnpj
:cnpj
order
by
dep.nome]]>
order by dep.nome]]>
</query>
</query>
<!-<!-- Recupera
Recupera oo endereco
endereco de
de um
um departamentos
departamentos dado
dado seu
seu nome
nome ee oo cnpj
cnpj da
da
universidade
ao
qual
pertence
-->
universidade ao qual pertence -->
<query
<query name="EnderecoPorDepartamentoECnpj">
name="EnderecoPorDepartamentoECnpj">
<![CDATA[from
<![CDATA[from Endereco
Endereco endereco,
endereco, Departamento
Departamento dep,
dep, Universidade
Universidade uni
uni
where
endereco.id_endereco
=
dep.id_endereco
where endereco.id_endereco = dep.id_endereco
and
and dep.id_universidade
dep.id_universidade == uni.id_universidade
uni.id_universidade
and
uni.cnpj
=
:cnpj
and uni.cnpj = :cnpj
and
and dep.nome
dep.nome == :nome]]>
:nome]]>
</query>
</query>
</hibernate-mapping>
</hibernate-mapping>
Teste de Seleção
Select.java
package
package br.testes.hibernate;
br.testes.hibernate;
import
import org.hibernate.Session;
org.hibernate.Session;
import
br.testes.hibernate.persistence.*;
import br.testes.hibernate.persistence.*;
import
import br.model.bean.Universidade;
br.model.bean.Universidade;
import
br.model.bean.Departamento;
import br.model.bean.Departamento;
import
import br.model.bean.Endereco;
br.model.bean.Endereco;
import
java.util.List;
import java.util.List;
import
import java.util.ArrayList;
java.util.ArrayList;
import
java.util.Iterator;
import java.util.Iterator;
}
/**
/**
** Classe
Classe Select
Select -- Utiliza
Utiliza oo Hibernate
Hibernate para
para selecionar
selecionar dados
dados nas
nas tabelas
tabelas do
do
** banco
universidades
chamando
as
consultas
nomeadas
no
arquivo
banco universidades chamando as consultas nomeadas no arquivo
** Consultas.hbm.xml
Consultas.hbm.xml
*/
*/
public
public class
class Select
Select {{
public
public static
static void
void main(String[]
main(String[] args)
args) {{
try
try {{
Session
Session session
session == HibernateFactory.getInstance().getSession();
HibernateFactory.getInstance().getSession();
...
...
}}
/*
/* Consultas
Consultas Nomeadas
Nomeadas */
*/
}} catch
catch (Exception
(Exception e)
e) {{ System.out.println(e);
System.out.println(e); }}
Teste de Seleção
Select.java
...
...
...
...
/*
/* Selecione
Selecione todas
todas as
as Universidades
Universidades ordenadas
ordenadas
em
ordem
alfabética
de
sua
razão
social*/
em ordem alfabética de sua razão social*/
org.hibernate.Query
org.hibernate.Query query
query == session.getNamedQuery("Universidades");
session.getNamedQuery("Universidades");
List
result
=
query.list();
List result = query.list();
ArrayList
ArrayList lista
lista == new
new ArrayList();
ArrayList();
Iterator
it
=
result.iterator();
Iterator it = result.iterator();
while(
while( it.hasNext()
it.hasNext() )) {{
Universidade
Universidade uni
uni == (Universidade)
(Universidade) it.next();
it.next();
lista.add(uni);
lista.add(uni);
System.out.println(
System.out.println( "universidade:
"universidade: "" ++ uni.getRazao_social());
uni.getRazao_social());
}}
/*
/* Selecione
Selecione aa razão
razão social
social da
da Universidade
Universidade cujo
cujo cnoj
cnoj == 1234*/
1234*/
org.hibernate.Query
query
=
org.hibernate.Query query =
session.getNamedQuery("UniversidadePorCnpj").setString("cnpj",
session.getNamedQuery("UniversidadePorCnpj").setString("cnpj", "1234");
"1234");
List
result
=
query.list();
List result = query.list();
ArrayList
ArrayList lista
lista == new
new ArrayList();
ArrayList();
Iterator
it
=
result.iterator();
Iterator it = result.iterator();
while(
while( it.hasNext()
it.hasNext() )) {{
Universidade
Universidade uni
uni == (Universidade)
(Universidade) it.next();
it.next();
lista.add(uni);
lista.add(uni);
System.out.println(
System.out.println( "universidade:
"universidade: "" ++ uni.getRazao_social());
uni.getRazao_social());
}}
...
...
Teste de Seleção
/*
/* Selecione
Selecione oo nome
nome dos
dos departamentos
departamentos da
da universidade
universidade cujo
cujo cnpj
cnpj == 1234*/
1234*/
org.hibernate.Query
query
=
org.hibernate.Query query =
session.getNamedQuery("DepartamentosPorCnpj").setString("cnpj","1234");
session.getNamedQuery("DepartamentosPorCnpj").setString("cnpj","1234");
Iterator
Iterator pairs
pairs == query.list().iterator();
query.list().iterator();
while(
pairs.hasNext()
while( pairs.hasNext() )) {{
Object[]
Object[] pair
pair == (Object[])
(Object[]) pairs.next();
pairs.next();
Departamento
dep
=
(Departamento)
Departamento dep = (Departamento) pair[0];
pair[0];
Universidade
uni
=
(Universidade)
pair[1];
Universidade uni = (Universidade) pair[1];
System.out.println(
System.out.println( "Universidade:
"Universidade: "" ++ uni.getRazao_social());
uni.getRazao_social());
System.out.println(
"Departamento:
"
+
dep.getNome());
System.out.println( "Departamento: " + dep.getNome());
}}
Select.java
...
...
/*
/* Selecione
Selecione oo endereco
endereco do
do departamentos
departamentos cujo
cujo nome
nome == DCC
DCC ee oo cnpj
cnpj da
da
universidade
ao
qual
pertence
=
1234
*/
universidade ao qual pertence = 1234 */
org.hibernate.Query
org.hibernate.Query query
query ==
session.getNamedQuery("EnderecoPorDepartamentoECnpj").setString("nome",
session.getNamedQuery("EnderecoPorDepartamentoECnpj").setString("nome",
"DCC").setString("cnpj","1234");
"DCC").setString("cnpj","1234");
Iterator
pairs
=
query.list().iterator();
Iterator pairs = query.list().iterator();
while(
while( pairs.hasNext()
pairs.hasNext() )) {{
Object[]
Object[] pair
pair == (Object[])
(Object[]) pairs.next();
pairs.next();
Endereco
endereco
=
(Endereco)
Endereco endereco = (Endereco) pair[0];
pair[0];
Departamento
dep
=
(Departamento)
Departamento dep = (Departamento) pair[1];
pair[1];
Universidade
uni
=
(Universidade)
pair[2];
Universidade uni = (Universidade) pair[2];
System.out.println(
System.out.println( "Universidade:
"Universidade: "" ++ uni.getRazao_social());
uni.getRazao_social());
System.out.println(
"Departamento:
"
+
dep.getNome());
System.out.println( "Departamento: " + dep.getNome());
System.out.println(
System.out.println( "Endereco:
"Endereco: "" ++ endereco.getRua());
endereco.getRua());
}}
Organização dos Arquivos
Organização
dos Arquivos
Download