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