Este documento apresenta uma introdução à Java Persistence API (JPA) e ao framework Hibernate. Ele discute como JPA e Hibernate permitem mapear objetos Java para bancos de dados relacionais de forma transparente, simplificando a persistência de dados. O documento também aborda tópicos como mapeamento de entidades, relacionamentos e estratégias de herança.
4. Agenda
Persistência de dados
O que é JPA?
O que é Hibernate?
Mapeando minhas entidades
Relacionamentos
Estratégias de herança
E agora, pra onde vou?
Globalcode – Open4education
5. Persistência de dados
“A persistência de dados, na computação, refere-se
ao armazenamento não-volátil de dados, por
exemplo, o armazenamento em um dispositivo físico
como um disco rígido. Quando se grava um arquivo
no disco, por exemplo, o dado está sendo
“eternizado”, ou seja, deixa de ficar volátil na
memória RAM e passa a ser escrito num dispositivo
que armazena a informação de modo que ela não
despareça facilmente.” Wikipedia
Globalcode – Open4education
6. Persistência de dados
Em Java e desenvolvimento de software em geral,
persistência de dados significa gravar dados
Na enorme maioria dos casos, gravamos em
bancos de dados relacionais (por enquanto)
Em contra partida, desenvolvemos orientados a
objetos. Dois paradigmas bem diferentes
Globalcode – Open4education
9. Persistência de dados
Relacional x Orientado a Objetos. Dois paradigmas
bem diferentes. Como resolver as diferenças?
Como mapear as tabelas do banco de dados para
os objetos Java?
Ou deveríamos mapear os objetos para as
tabelas?
Globalcode – Open4education
10. Surge o Super Hibernate!
Globalcode – Open4education
11. O que é Hibernate?
Framework para mapeamento objeto relacional
Permite que desenvolvamos naturalmente no
modelo orientado a objetos
Persistência transparente, simplificando e
agilizando o desenvolvimento
Independente de banco de dados
Globalcode – Open4education
12. O que é Hibernate?
Mantido pela JBoss e comunidade Java
Não faz parte da especificação padrão Java
E se a JBoss parar de desenvolver o projeto?
Como ficamos? Queremos continuá-lo! Queremos
que ele se torne um padrão Java!
Globalcode – Open4education
13. O que é JPA?
Java Persistence API, especificação de
persistência de dados em Java
Baseada nos principais frameworks do mercado
como o Hibernate
É uma especificação! Precisa de uma
implementação como Hibernate, TopLink e
EclipseLink.
JPA e Hibernate não são a mesma coisa!
Show me the code!
Globalcode – Open4education
18. Mapeamento
Mapear o modelo orientado a objetos e o modelo
entidade relacionamento
@Entity: aparece antes do nome das classes que
terão objetos persistidos no BD
@Id: indica a chave primária
@GeneratedValue: indica que o valor da chave
primária deve ser gerado pelo BD quando um
registro é inserido
Globalcode – Open4education
21. Operações básicas
Persistindo: Pessoa p = new Pessoa(“Fred”);
manager.persist(p);
Buscando: manager.find(Pessoa.class,1L);
manager.getReference(Pessoa.class,1L);
Removendo: manager.remove(Pessoa.class,1L);
Globalcode – Open4education
22. Operações básicas
Atualizando: Pessoa p = manager.find(Pessoa.class, 1L);
p.setNome(“Novo Nome”);
manager.persist(p);
Listando:
Query query = manager.createQuery(“select p from Pessoa p”);
List<Pessoa> pessoas = query.getResultList();
Globalcode – Open4education
23. Relacionamentos
Os relacionamentos entre as entidades de um
domínio devem ser expressos na modelagem
através de vínculos entre classes. Podemos definir
quatro tipos de relacionamentos de acordo com a
cardinalidade.
One to One
One to Many
Many to One
Many to Many
Globalcode – Open4education
24. Relacionamentos
One to One: por exemplo, um estado é governado
por apenas um governador e um governador
governa apenas um estado.
@Entity
public class Estado {
@OneToOne
private Governador governador;
}
Globalcode – Open4education
25. Relacionamentos
One to Many: por exemplo, um departamento possui
muitos funcionários e um funcionário trabalha em
apenas em um departamento.
@Entity
public class Departamento {
@OneToMany
private List<Funcionario> funcionarios;
}
Globalcode – Open4education
26. Relacionamentos
Many to One: por exemplo, um pedido pertence a
apenas um cliente e um cliente faz muitos pedidos.
@Entity
public class Pedido {
@ManyToOne
private Cliente cliente;
}
Globalcode – Open4education
27. Relacionamentos
Many to Many: por exemplo, um livro possui muitos
autores e um autor possui muitos livros.
@Entity
public class Livro {
@ManyToMany
private List<Autor> autores;
}
Globalcode – Open4education
28. Relacionamentos
Relacionamentos bidirecionais: quando
expressamos um relacionamento entre entidades
colocando um atributo em uma das entidades,
podemos acessar a outra entidade a partir da
primeira.
Vamos ver um exemplo.
Globalcode – Open4education
29. Relacionamentos
@Entity
public class Carro {
@OneToOne
private Motor motor;
}
@Entity
public class Motor {
@OneToOne(mappedBy = “motor”)
private Carro carro;
}
Globalcode – Open4education
30. Estratégias de herança
Um conceito um pouco complexo, a princípio, de se
̧ ̧
mapear é o de Heranca. A especificacão JPA define
̂
tres estratégia para realizar o mapeamento de
̧
heranca.
Single Table
Joined
Table per Class
Globalcode – Open4education
31. Single Table
A mais comum e a que possibilita melhor
̧
desempenho em relacão a velocidade das
consultas.
Será criada apenas uma tabela com o nome da
super classe para armazenar os dados dos objetos.
Globalcode – Open4education
32. Joined
Uma tabela para cada classe da hierarquia é criada.
Em cada tabela, apenas os campos referentes aos
atributos da classe correspondente são criados.
As tabelas correspondentes às sub classes
possuem chaves estrangeiras vinculadas à tabela
correspondente à super classe.
Globalcode – Open4education
33. Table per Class
Uma tabela para cada classe concreta da hierarquia
é criada.
Os dados de um objeto não são colocados em
tabelas diferentes. Para remontar um objeto não é
̧
necessário realizar operacões de join.
A desvantagem é que não existe um vínculo
explícito no banco de dados entres as tabelas.
Globalcode – Open4education
34. E agora pra onde vou?
http://docs.oracle.com/javaee/
Apostilas da K19
Blog e apostilas da Caelum
Livro: Java Persistence With Hibernate
Documentação oficial do Hibernate
Vários Ebooks gratuitos e em inglês (WowEbook)
Globalcode – Open4education