Sunteți pe pagina 1din 37

Hibernate 3

Aula 00 Teoria e Exerccios


Prof. Marco Reis

AULA 00: HIBERNATE 3

Sumrio

1. Introduo.................................................................................................................2
2. Hibernate 3................................................................................................................3
3. Questes..................................................................................................................25
4. Respostas e comentrios.........................................................................................33

Prof. Marco Reis

http://www.tiparaconcursos.net

Pgina 1 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

1. Introduo
O objetivo dessa aula preparar o aluno para as questes que envolvem o framework
Hibernate 3, cobrindo os conceitos e principais classe/interfaces que so cobradas nas provas. Para
isso, faremos uso de provas anteriores, analisando o tipo de entendimento que se espera do
candidato sobre essa tecnologia.
As questes, no geral, querem saber os conceitos sobre a tecnologia, quais as principais
funcionalidades e a responsabilidade de cada classe/interface do framework. Perceba que esse
texto no preparatrio para o uso profissional da ferramenta, estamos preocupados aqui em
mostrar o que exigido nos concursos.
A diferena entre essa abordagem terica e o uso prtico do Hibernate que no veremos
exemplos detalhados de implementao e otimizaes profissionais, pois esse nvel de dificuldade
no objetivo deste concurso. Aqui teremos uma viso geral da ferramenta dentro do que se
espera para essa prova especificamente.

http://www.tiparaconcursos.net

Pgina 2 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

2. Hibernate 3
O Hibernate uma ferramenta de mapeamento objeto/relacional para Java. Ele transforma
os dados tabulares de um banco de dados em um grafo de objetos definido pelo desenvolvedor.
Usando o Hibernate, o desenvolvedor se livra de escrever muito do cdigo de acesso a banco de
dados e de SQL que ele escreveria no usando a ferramenta, acelerando a velocidade do
desenvolvimento.
Mas o framework no uma boa opo para todos os tipos de aplicao. Sistemas que
fazem uso extensivo de stored procedures, triggers ou que implementam a maior parte da lgica
da aplicao no banco de dados, contando com um modelo de objetos pobre no vai se
beneficiar com o uso do Hibernate. Ele mais indicado para sistemas que contam com um modelo
rico, onde a maior parte da lgica de negcios fica na prpria aplicao Java, dependendo pouco
de funes especficas do banco de dados. O Hibernate foi escrito em Java, mas h uma verso
para .NET chamada NHibernate.
O Hibernate foi criado pelo programador Gavin King e surgiu da constatao que trabalhar
com software orientado a objetos e bases de dados relacionais tende a consumir muito tempo, j
que os paradigmas de desenvolvimento so diferentes. Da, surgiu a necessidade de criar uma
ferramenta intermediria que diminua essa diferena.
Segundo a documentao oficial do Hibernate, o programador no precisa ter grande
conhecimento de SQL para criar sistemas que acessam dados relacionais. Naturalmente, com esse
conhecimento possvel entender os conceitos mais rapidamente e com mais profundidade.
A principal funcionalidade do Hibernate mapear as classes Java para tabelas no banco de
dados relacional. Mais que isso, ele tem disponvel um mecanismo de recuperao de dados
bastante eficiente. O uso do Hibernate traz como principal consequncia a reduo do tempo
gasto com as tarefas de programao relacionadas com a persistncia dos dados, chegando a gerar
economia de tempo da ordem de 95% nas referidas tarefas.
Existem ferramentas para fazer a engenharia reversa e direta entre Hibernate e o banco de

http://www.tiparaconcursos.net

Pgina 3 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

dados, ou seja, voc pode criar as tabelas a partir das classes mapeadas e tambm pode criar as
classes mapeadas a partir do banco de dados. Na figura abaixo temos uma viso dos principais
componentes da arquitetura envolvida com o Hibernate.

Viso geral da arquitetura do Hibernate

Mapeamento de classes
A principal funcionalidade do Hibernate o mapeamento de classes Java para entidades de
banco de dados. Vamos considerar o exemplo de classe abaixo, que est no arquivo Pessoa.java.

package net.marcoreis.entidades;

http://www.tiparaconcursos.net

Pgina 4 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

import java.util.Date;
public class Pessoa {
private String nome;
private String telefone;
private Endereco endereco;
private Integer id;
private Date dataNascimento;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public Endereco getEndereco() {
return endereco;
}

http://www.tiparaconcursos.net

Pgina 5 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

public void setEndereco(Endereco endereco) {


this.endereco = endereco;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date dataNascimento) {
this.dataNascimento = dataNascimento;
}
}

Agora, vejamos a listagem da classe Endereco.java:

package net.marcoreis.entidades;
public class Endereco {
private String bairro;

http://www.tiparaconcursos.net

Pgina 6 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

private String cidade;


private String estado;
private String numero;
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getNumero() {

http://www.tiparaconcursos.net

Pgina 7 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
}

Estas classes usam o padro JavaBean, e essa uma boa prtica quando se trabalha com
Java. Para todos os efeitos, vamos imaginar que voc sabe como criar os mtodos de acesso, bem
como os principais padres da linguagem.
H 2 formas de mapear classes: com arquivos xml e com anotaes. O Hibernate precisa
saber como carregar e armazenar os objetos, para isso precisamos do arquivo mapeado. A
estrutura bsica parecida com o que segue:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
[...]
</hibernate-mapping>

Essas so as primeiras tags que precisamos configurar:

http://www.tiparaconcursos.net

Pgina 8 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

<hibernate-mapping package="net.marcoreis.entidades">
<class name="Pessoa" table="Pessoa">
</class>
</hibernate-mapping>

Continuando a criao do mapeamento, o prximo passo adicionar o identificador de


objetos, no caso, o atributo id.

<hibernate-mapping package="net.marcoreis.entidades">
<class name="Pessoa" table="Pessoa">
<id name="id" column="pessoa_id">
<generator class="native" />
</id>
</class>
</hibernate-mapping>

Os atributos devem ser mapeados e podem utilizar os padres do prprio banco de dados,
como no caso do nome e telefone, que usar o padro do banco de dados para String. Caso seja
necessrio, voc pode especificar outras propriedades no mapeamento para refinar o modelo,
como no caso da dataNascimento. Neste caso, o Hibernate vai usar o padro para String que est
definida no banco de dados utilizado. No caso do id, o Hibernate vai tentar usar a melhor
estratgia para criar a chave primria.

http://www.tiparaconcursos.net

Pgina 9 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Veja que o atributo endereco deve ser mapeado com a tag many-to-one pois faz referncia
a uma classe do seu domnio. Segue o cdigo:

<hibernate-mapping package="net.marcoreis.entidades">
<class name="Pessoa" table="Pessoa">
<id name="id" column="pessoa_id">
<generator class="native" />
</id>
<property

name="dataNascimento"

type="timestamp"

column="data_nascimento" />
<property name="nome" />
<property name="telefone" />
<many-to-one name="endereco" />
</class>
</hibernate-mapping>

Salve esse arquivo no mesmo diretrio das classes de entidade com o nome de
Pessoa.hbm.xml. Este nome ser referenciado nas outras configuraes que sero feitos em
seguida.
O mesmo procedimento deve ser feito com a classe Endereco. Crie um arquivo
Endereco.hbm.xml no pacote das entidades, mapeando os atributos. Neste caso, no teremos o
relacionamento many-to-one, uma vez que Endereco no tem relacionamentos com outras classes
(neste nosso exemplo). Para todo atributo mapeado deve haver os mtodos de acesso (set/get).

http://www.tiparaconcursos.net

Pgina 10 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Herana
O Hibernate suporte trs estratgias de herana:

Tabela nica por hierarquia de classes: uma nica tabela para toda a hierarquia de classes,
com todos os campos. Para a classe Pessoa e outras 2 subclasses PessoaFisica e
PessoaJuridica, o Hibernate ir gerar apenas 1 tabela Pessoa com os dados de Pessoa +
PessoaFisica + PessoaJuridica. A diviso entre os tipos feito atravs de um atributo
"discriminator".

Tabela por Subclasse: nessa estratgia ns teremos a Classe Pai e todas suas filhas geradas
no banco de dados fisicamente, sendo que em todas as classes filhas teremos uma chave
estrangeira que apontar para a classe pai. Isto , se tivermos 1 Classe Pessoa com 5
atributos, 1 Classe Pessoa Fsica com 10 atributos e 1 Classe Pessoa Jurdica com 15
atributos, o gerado ser: 1 tabela pessoa com 5 atributos, 1 tabela pessoa_fisica com 10
atributos e 1 tabela pessoa_juridica com 15 atributos.

Tabela por Classe Concreta: essa estratgia define que apenas as classes concretas geram
suas respectivas tabelas, ou seja, em nosso exemplo apenas pessoaFisica e pessoaJuridica
criaro tabelas, isso porque pessoa uma classe abstrata.

Conexo com o banco de dados


Para que o Hibernate possa acessar as tabelas, a maneira mais simples configurar o
arquivo hibernate.properties ou o hibernate.cfg.xml. No nosso exemplo estamos usando a opo
xml. Este arquivo deve estar no diretrio raiz das classes, ou, se estiver usando Maven, no
src/main/resources. Esta a melhor opo.
Neste arquivo est configurada a SessionFactory, que uma fbrica de sesses com o
banco de dados. O Hibernate trabalha com o conceito de sesso e no de conexo JDBC, apesar de
que voc consegue usar a conexo JDBC em uma aplicao. Naturalmente que isso fere a questo
do encapsulamento e precisa de um bom motivo para ser feito, pois pode prejudicar a

http://www.tiparaconcursos.net

Pgina 11 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

performance e at mesmo a estabilidade da aplicao, dependendo do que se faa com a conexo.

<?xml version='1.0' encoding='utf-8'?>


<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="net/marcoreis/entidades/Pessoa.hbm.xml" />
<mapping resource="net/marcoreis/entidades/Endereco.hbm.xml" />
</session-factory>
</hibernate-configuration>

O arquivo hibernate.properties tem a mesma funo, configurar as propriedades de


conexo com o banco. Logo abaixo est listado um modelo tpico:

http://www.tiparaconcursos.net

Pgina 12 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

Principais itens da API


Esses so os itens mais importantes da API do Hibernate:

SessionFactory (org.hibernate.SessionFactory): Thread-safe, cache imutvel composto de


mapeamentos compilados para um nico banco de dados. Uma fbrica para Session e um
cliente de ConnectionProvider, SessionFactory pode conter um cache opcional de dados
(segundo nvel) reutilizveis entre transaes, no nvel de processo ou cluster.

Session (org.hibernate.Session): objeto single-threaded, de vida curta, representa uma


conversao entre o aplicativo e o armazenamento persistente. Cria uma camada sobre
uma conexo JDBC. uma fabrica de Transaction. A Session possui um cache obrigatrio
(primeiro nvel) de objetos persistentes, usado para navegao nos grficos de objetos e
pesquisa de objetos pelo identificador. um objeto de linha de execuo nica,
compartilhado, que representa uma unidade de trabalho em particular com o banco de
dados (sesso). Com ele possvel criar, remover, atualizar e recuperar objetos persistentes
no banco de dados.

http://www.tiparaconcursos.net

Pgina 13 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Objetos persistentes e colees: objetos contendo estado persistente e funes de negcio,


so geralmente JavaBeans ou POJOs (plain old java objects). Esto associados com uma
instncia de Session. Quando esta Session fechada, esses objetos ficam em estado
detached e esto livres para serem usados em qualquer ponto da aplicao.

Objetos e colees desanexados (destacado ou detached) e transientes: instncias de


classes persistentes que no esto atualmente associadas com nenhuma instncia de
Session. Podem ter sido instanciados pela aplicao mas ainda no foram persistidos.

Transaction (org.hibernate.Transaction): objetos usados para especificar unidades de


trabalho atmicas. Uma Transaction abstrai esse tipo de funcionalidade do JDBC ou JTA.

ConnectionProvider (org.hibernate.connection.ConnectionProvider): fbrica e pool de


conexes JDBC. uma abstrao do javax.sql.DataSource ou do java.sql.DriverManager.
No est exposta para a aplicao.

TransactionFactory (org.hibernate.TransactionFactory): fbrica de instncias de Transaction,


no est exposta aplicao.

Query (org.hibernate.Query): usa SQL ou HQL para recuperar dados e criar objetos.
Podemos atribuir parmetros, limitar o nmero de resultados e finalmente executar a
consulta.

Criteria (org.hibernate.Criteria): usado para criar e executar consultas para recuperar


objetos.

O framework foi desenvolvido para uso corporativo, por isso, possvel integrar o
Hibernate na sua infraestrutura Java EE. Fazemos isso atravs desses pontos:

DataSources gerenciados pelo container: O Hibernate pode usar conexes JDBC


gerenciadas pelo Container e fornecidas pela JNDI. Geralmente, um TransactionManager
compatvel com JTA e um ResourceManager cuidam do gerenciamento da transao (CMT),
especialmente em transaes distribudas, manipuladas atravs de vrios DataSources.

http://www.tiparaconcursos.net

Pgina 14 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Vinculao (binding) automtica JNDI: O Hibernate pode associar sua SessionFactory a


JNDI depois de iniciado.

Vinculao (binding) da Sesso na JTA: A Session do Hibernate pode automaticamente ser


ligada ao escopo das transaes JTA. Simplesmente localizando a SessionFactory da JNDI e
obtendo a Session corrente.

JMX deployment: Se voc usa um JMX servidor de aplicaes capaz (ex. Jboss AS), voc
pode fazer a instalao do Hibernate como um MBean controlado.

Ciclo de vida dos objetos


Quando trabalhamos com Hibernate, devemos pensar nos objetos e em seus estados, no
no banco de dados. Essa converso responsabilidade do framework e s relevante para o
programador quando precisar fazer otimizaes na aplicao.

Transiente: so instncias que existem na memria, mas no tem registros correspondentes


existentes na tabela relacionada. Quando voc aloca uma instncia de uma classe mapeada
com a keyword new do Java, voc simplesmente criou uma instncia transiente.

Persistente: um objeto persistente tem uma representao na base de dados e um


identificador associado a ele. O Hibernate nos retorna uma instncia que tem um registro
correspondente no banco, incluindo o ID que usamos para realizar a busca.

Destacado (Detached): um objeto foi persistente, mas sua sesso (Session) foi fechada. A
referncia para o objeto ainda existe e ele ainda pode ser alterado. Mais tarde, uma
instncia desse tipo pode ser atachada a um novo objeto Session e suas atualizaes
podem ento ser persistidas novamente.

Configurao via cdigo

http://www.tiparaconcursos.net

Pgina 15 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

O programador pode fazer a configurao do Hibernate via cdigo, sem usar o xml. Veja um
exemplo simples de configurao:
Configuration cfg = new Configuration()
.addResource("Item.hbm.xml")
.addResource("Bid.hbm.xml");

Logo abaixo voc tem um exemplo de configurao mais complexa, onde percebemos que
podemos fazer todo tipo de configurao dinamicamente na aplicao:

Configuration cfg = new Configuration()


.addClass(org.hibernate.auction.Item.class)
.addClass(org.hibernate.auction.Bid.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
.setProperty("hibernate.order_updates", "true");

Dialetos
O Hibernate usa dialetos para descobrir as caractersticas especficas de cada banco de
dados, por isso, selecione corretamente a classe correspondente na propriedade hibernate.dialect.
O framework usa os padres dessa classe para algumas tarefas internas. Segue a lista de dialetos
disponveis:

DB2 - org.hibernate.dialect.DB2Dialect

DB2 AS/400 - org.hibernate.dialect.DB2400Dialect

http://www.tiparaconcursos.net

Pgina 16 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

DB2 OS390 - org.hibernate.dialect.DB2390Dialect

PostgreSQL - org.hibernate.dialect.PostgreSQLDialect

MySQL5 - org.hibernate.dialect.MySQL5Dialect

MySQL5 with InnoDB - org.hibernate.dialect.MySQL5InnoDBDialect

MYSQL com MyISAM - org.hibernate.dialect.MySQLMyISAMDialect

Oracle (qualquer verso)- org.hibernate.dialect.OracleDialect

Oracle 9i - org.hibernate.dialect.Oracle9iDialect

Oracle 10g - org.hibernate.dialect.Oracle10gDialect

Oracle 11g - org.hibernate.dialect.Oracle10gDialect

Sybase - org.hibernate.dialect.SybaseASE15Dialect

Sybase AnyWhere - org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server 2000 - org.hibernate.dialect.SQLServerDialect

Microsoft SQL Server 2005 - org.hibernate.dialect.SQLServer2005Dialect

Microsoft SQL Server 2008 - org.hibernate.dialect.SQLServer2008Dialect

SAP DB - org.hibernate.dialect.SAPDBDialect

Informix - org.hibernate.dialect.InformixDialect

HypersonicSQL - org.hibernate.dialect.HSQLDialect

H2 Database - org.hibernate.dialect.H2Dialect

Ingres - org.hibernate.dialect.IngresDialect

Progress - org.hibernate.dialect.ProgressDialect

Mckoi SQL - org.hibernate.dialect.MckoiDialect

http://www.tiparaconcursos.net

Pgina 17 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Interbase - org.hibernate.dialect.InterbaseDialect

Poinbase - org.hibernate.dialect.PointbaseDialect

FrontBase - org.hibernate.dialect.FrontbaseDialect

Firebird - org.hibernate.dialect.FirebirdDialect

Consultas
A linguagem de consulta do framework se chama Hibernate Query Language (HQL) e
orientada a objetos e entende conceitos como herana, polimorfismo e associao. Com exceo
de classes e propriedades, no case-sensitive. Voc pode usar Select ou sELECT e o resultado ser
o mesmo.
A sintaxe mais simples from net.marcoreis.entidades.Pessoa, ou em sua forma com
auto importao from Pessoa. possvel, e muitas vezes necessrio, usar alias nas consultas,
como em from Pessoa p. Tem suporte para inner join, left outer join, right outer join e full join.
Podemos fazer restries com a clusula where, como em from Pessoa where nome like
'marco%'. Se criar um alias, no esquea de us-lo: from Pessoa p where p.nome like 'marco%'.
Tem suporte seguintes funes agregadas:

avg(...), sum(...), min(...), max(...)

count(*)

count(...), count(distinct ...), count(all...)

O uso do HQL no obrigatrio. possvel fazer consultas com SQL puro e com a interface
Criteria, como no exemplo:

http://www.tiparaconcursos.net

Pgina 18 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

List pessoas = sess.createCriteria(Pessoa.class)


.add( Restrictions.like("nome", "marco%") )
.list();

Exemplo completo de aplicao CRUD


O cdigo a seguir mostra o funcionamento de uma aplicao com Hibernate com as
principais funcionalidades do framework: incluso, alterao, excluso e consulta.

Classe TesteDaPessoaSave
package net.marcoreis.entidades;
import java.util.*;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class TesteDaPessoaSave {
public static void main(String[] args) {
try {
1. SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
2. Session sessao = fabrica.openSession();
3. Pessoa pessoa = new Pessoa();
4. pessoa.setNome("Marco Antonio");
5. pessoa.setEndereco("CNB 14 LOTE 10");
6. pessoa.setTelefone("33521134");

http://www.tiparaconcursos.net

Pgina 19 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

7. SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");


8. long horaEmMilis = formatador.parse("06/04/1979").getTime();
9. Date data = new Date(horaEmMilis);
10. pessoa.setDataNascimento(data);
11. Transaction tx = sessao.beginTransaction();
12. sessao.save(pessoa);
13. tx.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Comentrio sobre cada linha do cdigo
1. O Hibernate l os arquivos hibernate.properties/hibernate.cfg.xml e faz todas as validaes
necessrias no banco de dados. Analisa se existem todas as tabelas, os relacionamentos e cria o
que estiver faltando, se for o caso.
2. Atravs da fbrica, cria uma sesso com a base de dados.
3, 4, 5, 6. cria o objeto Pessoa e informa os valores que devem ser persistidos.
7, 8, 9, 10 (opcional). rotina para recuperao de datas.
11. cria a transao (obrigatria), pois iremos criar um novo registro.
12. salva a pessoa na da sessao atual (veja os dados da sesso no arquivo hibernate.properties).
13. salva os dados na tabela Pessoa do banco de dados.

http://www.tiparaconcursos.net

Pgina 20 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Classe TesteDaPessoaLoad
package net.marcoreis.entidades;
import org.hibernate.*;
import org.hibernate.cfg.*;

public class TesteDaPessoaLoad {


public static void main(String[] args) {
1. SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
2. Session sessao = fabrica.openSession();
3. Long id = new Long(5);
4. Pessoa pessoa = (Pessoa) sessao.load(Pessoa.class, id);
5. System.out.println("Dados recuperados");
6. System.out.println(pessoa.getNome());
7. System.out.println(pessoa.getEndereco());
8. System.out.println(pessoa.getTelefone());
9. System.out.println(pessoa.getDataDeNascimento());
}
}

Comentrios sobre cada linha do cdigo


1, 2. configura a fbrica e abre a sesso com o banco.

http://www.tiparaconcursos.net

Pgina 21 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

3. Cria a varivel que indica qual o registro deve ser carregado.


4. sessao.load(Pessoa.class, id) recupera a Pessoa que tem o ID igual a 5. Utiliza um mecanismo
chamado cast converte o resultado para o objeto desejado (Pessoa). O cast especfico para cada
classe que voc deseja recuperar.
5 8. imprime na tela os dados recuperados do banco de dados.

Classe TesteDaPessoaDelete
package net.marcoreis.entidades;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class TesteDaPessoaDelete {
public static void main(String[] args) {
1. SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
2. Session sessao = fabrica.openSession();
3. Long id = new Long(5);
4. Pessoa pessoa = (Pessoa) sessao.load(Pessoa.class, id);
5. Transaction tx = sessao.beginTransaction();
6. sessao.delete(pessoa);
7. tx.commit();
}
}

http://www.tiparaconcursos.net

Pgina 22 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Comentrios sobre o cdigo


Obs: para excluir uma pessoa, voc deve, primeiro, consult-la na base.
1, 2. configura a fbrica e abre a sesso com o banco.
3. Cria a varivel que indica qual o registro deve ser carregado.
4. Recupera a pessoa com o ID igual a 5.
5. Inicia a transao (obrigatria), pois um registro ser excludo.
6. Exclui o objeto da sessao.
7. Confirma a transao no banco de dados.

Classe TesteDaPessoaUpdate
package net.marcoreis.entidades;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class TesteDaPessoaUpdate {
public static void main(String[] args) {
1. SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
2. Session sessao = fabrica.openSession();
3. Pessoa pessoa = (Pessoa) sessao.load(Pessoa.class, new Long(6));
4. Transaction tx = sessao.beginTransaction();
5. pessoa.setEndereco("Novo Endereo");
6. sessao.update(pessoa);
7. tx.commit();

http://www.tiparaconcursos.net

Pgina 23 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

}
}

Obs: para atualizar uma pessoa, voc deve, primeiro, consult-la na base.
1, 2. configura a fbrica e abre a sesso com o banco.
3. recupera a pessoa com o ID igual a 6.
4. inicia a transao (obrigatria), pois um registro ser atualizado.
5. o valor do atributo modificado.
6. o objeto modificado na sesso.
7. os dados do registro no banco de dados so finalmente atualizados.

http://www.tiparaconcursos.net

Pgina 24 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

3. Questes
1) 2012/FCC/TRT - 11 Regio (AM)/Tcnico Judicirio - Tecnologia da Informao
No Hibernate,
a) SessionFactory um objeto de linha de execuo nica, compartilhado, que representa uma
unidade de trabalho em particular com o banco de dados (sesso). Com ele possvel criar,
remover, atualizar e recuperar objetos persistentes no banco de dados.
b) as interfaces responsveis por executar operaes de criao, deleo, consulta e atualizao no
banco de dados so EntityManagerFactory, EntityManager, EntityTransaction e QueryManager.
c) A interface Transaction utilizada para representar uma unidade indivisvel de uma operao de
manipulao de dados. O uso dessa interface em aplicaes que usam Hibernate obrigatrio.
d) Uma consulta a banco de dados pode ser escrita na prpria linguagem orientada para objetos
do Hibernate (HQL) ou em puro SQL.
e) Objetos transientes so objetos em que suas instncias esto associadas a um contexto
persistente, ou seja, tem uma identidade de banco de dados.

2) 2011/FCC/TRE-RN/Tcnico Judicirio - Programao de Sistemas


No Hibernate,
a) executa operaes de busca, cadastro ou alterao de dados, sem requerer mapeamento da
tabela em arquivo XML.
b) INSERT a nica instruo SQL que requer utilizao pelo desenvolvedor.
c) os dados tabulares de um banco de dados so transformados em um grafo de objetos definido
pelo desenvolvedor.
d) a soluo aos ambientes Java de mapeamento objeto/relacional proporcionada pela abstrao
de toda a parte de representao de tipo de dados por meio de arquivos HTML.
http://www.tiparaconcursos.net

Pgina 25 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

e) o desenvolvedor pode acessar diretamente uma tabela de banco de dados, bastando, para isso,
abrir uma conexo.

3) 2011/FCC/TRT - 19 Regio (AL)/Tcnico Judicirio - Tecnologia da Informao


Em sua essncia, o Hibernate um framework para
a) mapeamento objeto-relacional (ORM).
b) desenvolvimento de aplicaes de Internet rica (Rich Internet Application - RIA).
c) implementao da camada Controller do padro MVC (Model - View - Controller).
d) construo de aplicaes utilizando-se inverso de controle (IoC).
e) injeo de dependncia (dependency injection) em aplicativos.

4) 2010/FCC/TRT - 22 Regio (PI)/Tcnico Judicirio - Tecnologia da Informao


Hibernate um framework
a) que separa as funes que envolvem a construo de aplicaes Web, atravs da associao dos
eventos do lado cliente com os manipuladores dos eventos do lado do servidor.
b) pelo qual o programador utiliza a infraestrutura do servidor de aplicao voltada para o
desenvolvimento de aplicaes de misso crtica e de aplicaes empresariais em geral.
c) no qual as questes de infraestrutura, segurana, disponibilidade e escalabilidade so
responsabilidade do servidor de aplicaes, permitindo que o programador se concentre, apenas,
nas necessidades do negcio do cliente.
d) que permite ao desenvolvedor de pginas para internet produzir aplicaes que acessem o
banco de dados, manipulem arquivos no formato texto e capturem informaes a partir de
formulrios.
e) cujo objetivo diminuir a complexidade entre os programas Java que precisam trabalhar com
http://www.tiparaconcursos.net

Pgina 26 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

um banco de dados do modelo relacional.

5) 2014/FUNCAB/PRODAM-AM/Programador - Desenvolvedor Especialista


Muitos sistemas corporativos atuais so desenvolvidos utilizando linguagem de programao
orientada a objetos e banco de dados relacional. Para simplificar a utilizao em conjunto desses
dois diferentes paradigmas, pode ser aplicado um framework de mapeamento objeto relacional,
como por exemplo:
a) Struts.
b) Hibernate
c) Spring.
d) Java Server Faces.
e) Jquery.

6) 2012/FCC/TRE-CE/Tcnico Judicirio - Programao de Sistemas


Com relao ao framework Hibernate correto afirmar:
a) Permite fazer a persistncia automatizada dos objetos em uma aplicao Java para as tabelas de
um banco de dados relacional, utilizando metadados (descrio dos dados) que descrevem o
mapeamento entre os objetos e o banco de dados.
b) uma boa opo apenas para sistemas que fazem muito uso de stored procedures, triggers ou
que implementam a maior parte da lgica da aplicao no banco de dados vai se beneficiar mais
com o uso do Hibernate.
c) Permite enviar unidirecionalmente uma representao de dados de um banco de dados
relacional para um modelo de objeto utilizando um esquema baseado exclusivamente em
Hibernate Query Language (HQL).

http://www.tiparaconcursos.net

Pgina 27 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

d) A Java Persistence API (JPA) implementa o Hibernate, que parte do Enterprise JavaBeans 4.0.
e) Em uma aplicao criada com Hibernate, para cada classe de persistncia necessrio criar um
arquivo de mapeamento XML que deve ser salvo obrigatoriamente com o nome da classe seguido
pelo sufixo .map.xml.

7) 2010/FCC/TRT - 8 Regio (PA e AP)/Analista Judicirio - Tecnologia da Informao


Os trs estados de objeto definidos pelo framework Hibernate so:
a) Temporrio (Temporary), Permanente (Permanent) e Resiliente (Resilient).
b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient).
c) Temporrio (Temporary), Persistente (Persistent) e Destacado (Detached).
d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached).
e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient).

8) 2013/CESPE/MPOG/Tcnico de Nvel Superior


Quando se desenvolve um mapeamento com Hibernate, uma classe persistente criada no precisa
implementar ou herdar qualquer classe especial do framework Hibernate.

9) 2014/FUNCAB/PRODAM-AM/Programador - Desenvolvedor Especialista


Em uma query escrita em HQL(Hibernate Query Language), so case-sensitive:
a) somente nomes de classes Java e propriedades e palavras reservadas doHQL.
b) somente palavras reservadas do HQL
c) todos elementos da query
d) nenhumelemento da query.
http://www.tiparaconcursos.net

Pgina 28 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

e) somente nomes de classes Java e propriedades.

10) 2013/CESPE/INPI/Analista de Planejamento - Desenvolvimento e Manuteno de Sistemas


A respeito dos frameworks de desenvolvimento Java, julgue os itens subsecutivos.
O objeto Session Factory do Hibernate mantm o mapeamento objeto relacional na sesso.

11) 2013/CESPE/INPI/Analista de Planejamento - Desenvolvimento e Manuteno de Sistemas


A respeito dos frameworks de desenvolvimento Java, julgue os itens subsecutivos.
interface Criteria do Hibernate utilizada para realizar consultas ao banco de dados.

12) 2009/FCC/PGE-RJ/Tcnico Superior de Anlise de Sistemas e Mtodos


Usando Hibernate, o mapeamento de uma relao de herana pode ser feito usando uma tabela
por
a) classe concreta, subclasse ou hierarquia.
b) hierarquia, apenas.
c) subclasse, apenas.
d) classe concreta ou subclasse, apenas.
e) classe concreta, apenas.

13) 2010/CESPE/TRE-BA/Analista Judicirio - Anlise de Sistemas


Julgue o item abaixo, referente ao Hibernate.
No Hibernate, apenas a linguagem de consulta HQL (hibernate query language) pode ser utilizada.
A HQL executa os pedidos SQL sobre as classes de persistncia do Java em vez de tabelas no banco
http://www.tiparaconcursos.net

Pgina 29 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

de dados, o que diminui a distncia entre o desenvolvimento das regras de negcio e o banco de
dados.

14) 2011/FCC/TRT - 19 Regio (AL)/Tcnico Judicirio - Tecnologia da Informao


Linguagem de queries, fornecida pelo Hibernate, que similar em aparncia ao SQL e que, no
entanto, orientada a objeto e compreende noes como herana, polimorfismo e associao.
Trata-se de
a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.

15) 2009/FCC/TJ-PI/Analista Judicirio - Tecnologia da Informao


Hibernate uma ferramenta open-source que facilita a comunicao entre aplicao Java e banco
de dados, tais como manipulao de dados, gerenciamento de transaes e pooling de conexes.
A esse respeito, considere o trecho de cdigo para configurao do Hibernate:

Tendo em vista os dados acima, analise:


http://www.tiparaconcursos.net

Pgina 30 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

I. o cdigo exibe a estrutura bsica de um arquivo XML de mapeamento que indica ao Hibernate
como carregar e gravar os objetos de uma classe de persistncia;
II. as declaraes de mapeamento esto circunscritas entre as tags </hibernate-mapping>; ;
III. o elemento < id > a declarao de uma propriedade identificadora de tabela (chave-primria)
e o atributo column="ID_PESSOA" indica qual o campo na tabela ao qual ele est ligado.
correto o que consta em
a) I, apenas.
b) I e II, apenas.
c) I, II e III.
d) II e III, apenas.
e) I e III, apenas.

16) 2012/FCC/TRE-CE/Analista Judicirio - Anlise de Sistemas


Considere:
I. Cache imutvel composto de mapeamentos compilados para um nico banco de dados.
II. Objeto single-threaded, de vida curta, que representa uma conversao entre o aplicativo e o
armazenamento persistente.
III. Abstrai a aplicao dos Datasource ou DriverManager adjacentes.
Em relao arquitetura do Hibernate, os itens I, II e III, associam-se, respectivamente, a
a) SessionFactory, Session e Connection Provider.
b) Transaction Factory, Session Factory e Connection Provider.
c) Session, Connection Provider e Extension Interfaces.
d) Connection Provider, Extension Intefaces e Session Factory.
http://www.tiparaconcursos.net

Pgina 31 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

e) Connection Provider, Session e Session Factory.

http://www.tiparaconcursos.net

Pgina 32 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

4. Respostas e comentrios
1) Resposta: d.
A alternativa correta a letra D. As demais esto erradas porque:
a) essa a definio de Session.
b) no faz parte do Hibernate, e sim do JPA.
c) no obrigatrio usar Transaction em toda a aplicao.
d) correto.
e) essa a definio de objeto persistente.

2) Resposta: c.
a) segundo o gabarito oficial, esta alternativa est errada, mas o Hibernate suporta anotaes.
Acontece que essas anotaes fazem parte da especificao JPA, no do Hibernate.
b) errado. O programador no precisa obrigatoriamente usar nenhuma instruo SQL.
c) certo.
d) errado. Os arquivos so em XML e no em HTML.
e) segundo o gabarito oficial, est errado. Mas possvel abrir uma conexo direta JDBC atravs de
um wrapper.

3) Resposta: a.
No pode errar esse tipo de questo: Hibernate um framework para mapeamento objeto
relacional.

http://www.tiparaconcursos.net

Pgina 33 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

4) Resposta: e.
Cada alternativa representa uma tecnologia Java conforme indicado abaixo:
a) JSF
b) EJB
c) EJB
d) JSP
d) Hibernate

5) Resposta: b.
Questo bastante simples, que mostra outra forma de definir o Hibernate.

6) Resposta: a.
b) errado. exatamente o inverso do que diz essa alternativa. Quanto menos componentes
prprios de banco forem usados, mais fcil a utilizao do modelo de dados com Hibernate.
c) errado. O programador pode usar HQL, Criteria e SQL puro.
d) errado. Hibernate implementa a especificao JPA.
e) segundo o gabarito, est errado. Mas o sufixo no obrigatrio. H conflito entre a
documentao oficial e o entendimento da banca.

7) Resposta: d.

Transiente: so instncias que existem na memria, mas no tem registros correspondentes


existentes na tabela relacionada. Quando voc aloca uma instncia de uma classe mapeada
com a keyword new do Java, voc simplesmente criou uma instncia transiente.

http://www.tiparaconcursos.net

Pgina 34 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

Persistente: um objeto persistente tem uma representao na base de dados e um


identificador associado a ele. O Hibernate nos retorna uma instncia que tem um registro
correspondente no banco, incluindo o ID que usamos para realizar a busca.

Destacado (Detached): um objeto foi persistente, mas sua sesso (Session) foi fechada. A
referncia para o objeto ainda existe e ele ainda pode ser alterado. Mais tarde, uma
instncia desse tipo pode ser atachada a um novo objeto Session e suas atualizaes
podem ento ser persistidas novamente.

8) Resposta: certo.
De acordo com os exemplos vistos, no obrigatrio o uso da herana para criar classes
persistentes no Hibernate. O mapeamento pode ser feito via xml ou anotao JPA.

9) Resposta: e.
A linguagem de consulta do framework se chama Hibernate Query Language (HQL) e
orientada a objetos e entende conceitos como herana, polimorfismo e associao. Com exceo
de classes e propriedades, no case-sensitive. Voc pode usar Select ou sELECT e o resultado ser
o mesmo.

10) Resposta: certo.


A SessionFactory permite a aplicao criar sesses a partir de arquivos de configurao
hibernate.cfg.xml. Aps definir questes transacionais (opcional) a aplicao pode usar objetos
persistentes e a sesso hibernate para salvar dados no SGBD.

11) Resposta: certo.


Criteria (org.hibernate.Criteria): usado para criar e executar consultas para recuperar
http://www.tiparaconcursos.net

Pgina 35 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

objetos.

12) Resposta: a.
O Hibernate suporte 3 estratgias de herana:

Tabela nica por hierarquia de classes: uma nica tabela para toda a hierarquia de classes,
com todos os campos.

Tabela por Subclasse: nessa estratgia ns teremos a Classe Pai e todas suas filhas geradas
no banco de dados fisicamente, sendo que em todas as classes filhas teremos uma chave
estrangeira que apontar para a classe pai.

Tabela por Classe Concreta: essa estratgia define que apenas as classes concretas geram
suas respectivas tabelas.

13) Resposta: errado.


Existem trs formas de se fazer buscas usando o Hibernate: com Hibernate Query Language
(HQL), com a Criteria Query API e usando SQL puro.

14) Resposta: d.
A linguagem de consulta do framework se chama Hibernate Query Language (HQL)

15) Resposta: c.
Todas as alternativas esto corretas. Este um arquivo tpico para mapeamento do
Hibernate, as declaraes dos atributos de mapeamento esto entre as tags do hibernatemappings e id o atributo identificador do objeto.

http://www.tiparaconcursos.net

Pgina 36 de 37

Hibernate 3
Aula 00 Teoria e Exerccios
Prof. Marco Reis

16) Resposta: a.
Os mapeamentos ficam no SessionFactory, a conversao feita atravs da Session e a
abstrao do DriverManager o ConnectionProvider.

http://www.tiparaconcursos.net

Pgina 37 de 37

S-ar putea să vă placă și