Você está na página 1de 74

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

Departamento
1
1

Endereo

Java + Modelo Relacional


H
I
B
E
R
N
A
T
E

Modelo Relacional
Universidade
1
N

Departamento
1
1

Endereo

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

Endereo

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 soluo open source de
ORM.

Onde se localiza o Hibernate?

Arquitetura em camadas
de projetos OO
Camada de Apresentao

Camada de Regras de
Negcio
Hibernate

Camada de Persistncia

Banco de
Dados

Classes
de
Utilidade
e
Assistente

Abstrao do SGBD
O Hibernate est localizado entre o JDBC e a

aplicao.
Caso seja preciso mudar o SGBD de sua
aplicao basta apenas alterar o driver usado
e sua referncia no arquivo hibernate.cfg.xml.

Como a Arquitetura do
Hibernate?

Arquitetura do Hibernate
Camada de Negcio
Classes de
Persistncia

Ciclo de Vida

Interceptor
Tipo de usurio

Tabela de Validao

Camada de Persistncia
Sesso

Fbrica de Sesses

Transao

JNDI

Hibernate API

JDBC

Configurao

Consulta

JTA

J2EE API

Arquitetura do Hibernate
Camada de Negcio
Classes de
Persistncia

Ciclo de Vida
Tabela de Validao

Camada de Persistncia
Sesso

Fbrica de Sesses

Transao

Responsveis
JNDI
Responsveispor
por
executar
executaroperaes
operaesde
de
criao,
Hibernate API
criao,deleo,
deleo,consulta
consulta
eeatualizao
atualizaono
noBD
BD

Mantm
Mantmoomapeamento
mapeamento
objeto/relacional
na
objeto/relacional
Interceptor na
memria.
memria.Permite
Permiteaa
criao
de
Sesso.
de usurio
criaoTipo
deobjetos
objetos
Sesso.

JDBC

Configurao

Consulta

JTA

Utilizada
Utilizadapara
para
J2EE API o Hibernate
configurar
configurar o Hibernate

Responsveis
Responsveispor
porrealizar
realizar
aainterao
interaoentre
entreosos
eventos
eventosdo
doHibernate
Hibernateeeaa
aplicao.
aplicao.

Arquitetura do Hibernate
Camada de Negcio
Classes de
Persistncia

Ciclo de Vida

Interceptor
Tipo de usurio

Tabela de Validao

Camada de Persistncia
Sesso

Transao

JNDI

Hibernate API

JDBC

Consulta

Permite
aade
extenso
Fbrica
Sesses
Permite
extens
odas
das
funcionalidades
funcionalidadesdo
do
Configurao
mapeamento
mapeamentodo
do
Hibernate
Hibernate
JTA

J2EE API

Arquitetura do Hibernate
Camada de Negcio
Classes de
Persistncia

Ciclo de Vida
Tabela de Validao

Interceptor
Tipo de usurio

Camada de Persistncia
Sesso

JNDI

Fbrica de Sesses
So
Soaquelas
aquelasclasses
classesque
que
implementam
asas
Configurao
Transao implementam
Consulta
entidades
entidadesdomnio
domniode
de
negcios.
JDBCnegcios.
JTA

Hibernate API

J2EE API

Arquitetura do Hibernate

Classes de Persistncia

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 lgica de
negcio da aplicao.

Arquitetura do Hibernate

Escolhas das chaves primrias

Chaves primrias naturais, como por exemplo CPF


para a tabela Pessoa, devem ser evitadas.
Recomenda-se fortemente que as chaves primrias
das tabelas sejam sintticas, ou seja, no possuam
significados de negcios .
O Hibernate apresenta vrios mecanismos
internos para a gerao de chaves primrias.

Por exemplo, sequence que mapeia uma seqncia


no PostegreSQL.

Como a instalao do Hibernate?

Preparando o ambiente

Passo 1:
Instalao do SGBD PostegreSQL;
Passo 2:
Instalao da IDE Eclipse;
Passo 3:
Instalao do Hibernate;
Passo 4:
Configurao do Hibernate;

Passo 1:

Instalao 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 boto direito em postegre-8.1.msi e
escolha instalar
Siga o passo a passo
Escolha a opo de Idioma = Portugus
Escolha: superusurio = admin e senha = admin

Passo 2:

Instalao da IDE Eclipse


1.
2.
3.
4.
5.
6.

Considerando que j exista um ambiente para


programao 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:

Instalao 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 documentao est localizada em

hibernate-3.1.3\hibernate-3.1\doc\reference\em\html\index.html

Passo 4:

Configurao do Hibernate
A configurao do Hibernate ser apresentada
atravs de um exemplo prtico.

Configurao do Hibernate

Exemplo
1.
2.
3.
4.

5.

Criar o banco de dados Universidades com as 3 tabelas:


Universidade, Departamento e Endereo.
Configurar o Hibernate.
Criar os arquivos ORM que relacionam as propriedades do
objeto aos campos da tabela.
Criar os arquivos de configurao .xml contendo as
propriedades para que o Hibernate se conecte ao banco de
dados.
Testar o que foi feito.

Configurao do Hibernate
Exemplo

1. Criao do Banco de Dados

Configurao do Hibernate
Exemplo

Banco de Dados - Universidades

Configurao do Hibernate
Exemplo

Criando as seqncias usadas pelas chaves primrias


-- 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";

Configurao do Hibernate
Exemplo

Criando as seqncias usadas pelas chaves primrias


-- 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";

Configurao do Hibernate
Exemplo

Criando as seqncias usadas pelas chaves primrias


-- 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

Configurao 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";

Configurao 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";

Configurao 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";

Configurao do Hibernate
Exemplo

2. Configurar o Hibernate

Configurao do Hibernate
Exemplo

Configurao do Ambiente

Crie um diretrio 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

Configurao do Hibernate
Exemplo

Configurao do Ambiente

Crie um pacote br.model.bean para os arquivos de


persistncia;
Crie um pacote br.testes.hibernate onde ficaro 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
tambm ser baixado do site www.postegresql.org;
O arquivo Hibernate.cfg.xml dever ficar na raiz da
aplicao.

Configurao do Hibernate
Exemplo

3. Criao dos Arquivos ORM

Configurao do Hibernate
Exemplo

Arquivos ORM

Para cada tabela necessrio a criao dos


arquivos ORM;

O primeiro arquivo uma classe de persistncia


JAVA que deve ter:
Um

construtor padro sem argumentos


Variveis para cada atributo da tabela. Cada uma
destas variveis deve possuir os mtodos get e set;

O segundo arquivo possui a extenso .hbm.xml, e


faz o mapeamento entre os atributos das tabelas e
as variveis das classes de persistncia JAVA;

Configurao 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">

Descrio
dos atributos
da Tabela

<id
<id name="id_universidade"
name="id_universidade"
Seqncia
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 varivel
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>

Configurao 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
coleo 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

No 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.

Configurao do Hibernate
Exemplo

4. Arquivos de Configurao

Configurao
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
conexo
especfica
do BD

Dialeto SQL
especfico 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 no
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
usurio e senha
com o qual o
Hibernate deve
se comunicar
com o BD

Arquivos de
mapeamento

Configurao
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() );
);
}}
...
...

Configurao
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;
}}

Configurao do Hibernate
Exemplo

4. Testes

Insero
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 );
); }}

Insero
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 );
); }}
}}
}}

Insero
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 Insero
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 Insero
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 Seleo
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 Seleo
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 Seleo
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 Seleo
Select.java
...
...

...
...

/*
/* Selecione
Selecione todas
todas as
as Universidades
Universidades ordenadas
ordenadas
em
ordem
alfabtica
de
sua
razo
social*/
em ordem alfabtica de sua razo 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 razo
razo 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 Seleo

/*
/* 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());
}}

Organizao dos Arquivos

Organizao
dos Arquivos

Você também pode gostar