Escolar Documentos
Profissional Documentos
Cultura Documentos
JPA Com Hibernate
JPA Com Hibernate
Rascunho
Autor:Ivan Salvadori
Para listar os clientes gravados o banco, executa-se um instruo SQL SELECT, com os
dados obtidos do banco construdo um objeto do tipo Cliente, e definido as suas propriedades
atravs dos mtodos setter's.
PreparedStatement stmt = con.prepareStatement("select * from Cliente");
while (rs.next()) {
Cliente c = new Cliente();
c.setCodigo(rs.getInt("codigo"));
c.setNome(rs.getString("nome"));
c.setRg(rs.getString("rg"));
c.setCpf(rs.getString("cpf"));
c.setTelefone(rs.getString("telefone"));
c.setDataNasc( rs.getDate("data_nasc")
);
}
Banco de Dados
Ilustrao 4: Estrutura JPA Hibernate . Adaptado de Bellia, Renato.
Revista Java Magazine, ed. 44, p. 28.
JPA nos possibilita desenvolver toda a persistncia com o mnimo de cdigo possvel atravs
de uma forma fantstica, mas como possvel realizar essa facilidade? Ser o Assunto dos
prximos captulos.
2. Entendendo o Framework.
Segundo FLVIO HENRIQUE CURTE, Antares Information Systems:
A ideia da persistncia O/R reunir as vantagens de se utilizar um modelo orientado a
objetos para a construo de uma aplicao, com a performance e a confiabilidade dos bancos de
dados relacionais. (adaptado de JPA: Persistncia padronizada em Java).
O modelo orientado a objetos nos d muito mais recursos para a representao da
informao, fica muito mais fcil de entender e principalmente desenvolver software fazendo uso
do paradigma dos objetos, por outro lado, o modelo relacional excelente para armazenamento
fsico das informaes. Criou-se ai um empasse, sendo necessrio uma especie de traduo entre um
modelo para o outro. A introduo desse material exemplificou a forma que essa traduo
realizada via JDBC. A Especificao JPA possibilita trabalhar com o modelo relacional dos bancos
de dados, com a representao do modelo orientado a objetos. Observe o cdigo a seguir:
}
Como possvel o framework Hibernate realizar a gravao das informaes do objeto
cliente no banco de dados?
Para que isso seja possvel, o Hibernate deve ter conhecimento das informaes do objeto
cliente, assim como conhecer os detalhes do banco de dados. necessrio o conhecimento do
contedo das tabelas dentre outras informaes ligadas ao projeto relacional.
Vamos recorrer ao nosso problema de cadastro de clientes, temos a nossa Classe Cliente que
deve ter as suas propriedades gravadas. A tabela Cliente da suporte para a gravao de todas as
informaes da classe. Dessa forma a classe cliente ser armazenada na tabela Cliente. Cada
atributo da classe ser gravado em uma coluna da tabela com seu respectivo nome. A Ilustrao 5
demonstra como deve ser o mapeamento da classe Cliente para a tabela Cliente.
exemplo a seguir mostra o cdigo que realiza a gravao de um objeto cliente, no banco de dados,
mas dessa vez utilizando a sintaxe completa do JPA.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ClienteJPA");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(cliente);
em.getTransaction().commit();
em.close();
emf.close();
persistence-unit
configurado no
em.getTransaction().begin();
Para que o objeto seja realmente gravado, deve-se dar a ordem de exucao de gravao,
isso se faz atravs do cdigo abaixo. Commit concretiza a solicitao do recurso de gravao.
em.getTransaction().commit();
No exemplo acima, uma transao iniciada, e o mtodo find localiza a partir do cdigo o
objeto, os dois parmetros da procura so a classe do objeto, que serve de referencia para dizer
aonde procurar, e o cdigo, que diz oque procurar.
O cdigo abaixo mostra como alterar os objetos:
entityManager.merge(cliente);
O mtodo merge atualiza o registro da tabela do banco que possui o mesmo cdigo do
objeto passado por parmetro. As ilustraes 6 e 7 mostram o processo de atualizao do objeto
cliente.
Para explicar oque ocorreu errado na tentativa de remover o registro, tem-se que entender o
conceito de entidades gerenciadas pelo JPA. Ao criar objetos na aplicao, inicialmente esses no
esto sendo gerenciados pelo JPA.
Cliente titi = new Cliente();
cliente.setNome("Carvo");
cliente.setCpf("4445988-5");
cliente.setRg("48053400");
cliente.setTelefone("4833666");
em.getTransaction().begin();
em.persist(cliente);
em.getTransaction().commit();
em.getTransaction().begin();
em.remove(cliente);
em.getTransaction().commit();
Ilustrao 10: Tentativa de remoo de entidade no gerenciada.
ERRO
Note que a remoo se aplicou a uma entidade que no estava sendo gerenciada pelo JPA, este o
motivo do erro. O JPA no pode remover uma entidade que no gerenciada por ele. Sendo assim, a
entidade que deseja-se remover deve estar sob o domnio do framework. Uma forma de fazer isso
solicitar que o Hibernate faa a pesquisa da entidade. Toda a entidade selecionada do banco de
dados atravs do framework, est sob gerenciamento. O cdigo que segue mostra a implementao
da soluo encontrada.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAExemplo");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Cliente c = em.find(Cliente.class, 5);
em.getTransaction().commit();
em.getTransaction().begin();
em.remove(c);
em.getTransaction().commit();
em.close();
emf.close();
em.getTransaction().begin();
Cliente c = em.find(Cliente.class, 5);
em.getTransaction().commit();
em.getTransaction().begin();
em.remove(c);
em.getTransaction().commit();
Remoo
Realizada
Entidades Monitoradas pelo JPA
Resumo do Captulo:
A forma tradicional de manipulao de informaes em banco de dados, envolve um cdigo
muito extenso e propenso a erros e profundas modificaes caso seja necessrio qualquer
modificao na configurao dos dados. A pratica de uso JDBC despende de grande esforo para o
desenvolvimento e consequentemente na manuteno dos sistemas.
JPA vem com a proposta de facilitar o penoso trabalho de manipular informaes que
precisam ser gravadas em banco de dados, tornando a manipulao de banco de dados, que segue o
paradigma relacional, em uma abordagem orientada a objeto.
O Hibernate uma implementao da especificao padro, e a configurao do framework
se faz principalmente por meio de anotaes nas classes que sofreram persistncia. As
configuraes fsicas do banco de dados ficam no arquivo persistence.xml, que contm todas as
propriedades do sistema gerenciador de banco de dados a a ser utilizado.
As funes de manipulao de dados so realizadas por mtodos do gerenciador de
entidades, sendo essas persist, merge, find e remove. O JPA mantem sob seu gerenciamento as
entidades que manipula.
Este capitulo mostrou os conceitos bsicos do JPA com Hibernate, seus principais
componentes, conceitos e configuraes.
Concluda esta etapa, o projeto passa a possuir caractersticas JSF e JPA, em outras palavras,
o projeto agrega funcionalidades dos dois Frameworks. Observe que agora est presente o arquivo
de configurao do Hibernate.