JPA - API
Prof. Leandro Rubim
[email protected]
[email protected]
Componentes Avançados
Agenda







JPA
EntityManager
Definições
Contexto Persistência
Obtendo um EntityManager
Transações
API EntityManager
2
JPA





Conjunto de anotações para mapeamento O/R;
API para persistência de entidades;
Linguagem de consultas EJB-QL;
Especificação independente de fabricante;
Utilizaremos a implementação Hibernate:
– Hibernate Core;
– Hibernate Annotations;
– Hibernate Entity Manager;
3
Entity Manager
 Unidade central para gerenciamento de entidades na JPA através de uma
API padronizada;
 Responsável pela criação, atualização, remoção e consulta às entidades
(CRUD);
 Controle de transações;
 Gerenciamento de cache;
4
Definições
 Unidade de Persistência:
– conjunto fixo de classes mapeadas para o banco de dados
(persistence.xml);
 Contexto de Persistência:
– conjunto de instâncias de entidades gerenciadas de um Entity
Manager;
 Entidades Gerenciadas:
– quando entidades estão associadas a um contexto de
persistência;
– alterações no estado das entidades são sincronizadas com o
banco de dados;
– ao fechar um contexto de persistência, todas suas instâncias
de entidades associadas tornam-se não gerenciadas;
 Entidades Não Gerenciadas:
– entidades não associadas a um contexto de persistência (por
exemplo quando são instanciadas);
– alterações nas entidades não se refletem no banco de dados;
5
Contexto Persistência
 Ponte entre entidades na memória e banco de dados;
 Gerenciada por um Entity Manager;
Entidade
Contexto
BD
Entity Manager
6
Estados Entidade
 new  instância da entidade criada em memória mas não associada a um
contexto de persistência e não possui id equivalente no banco de dados;
 managed  tem um id no banco de dados e está associada a um contexto
de persistência;
 detached  tem um id no bando de dados mas não está associada ao
contexto de persistência;
 removed  instância da entidade associada a um contexto de persistência
mas está programada para ser removida do banco de dados;
7
Diagrama de Estado Entidade
new()
new
refresh()
persist()
remove()
removed
managed
persist()
merge()
•Contexto fechado
•Commit
•Serialização
detached
8
Obtendo um EntityManager
 Utilizar a anotação @PersistenceContext para obter, via injeção de
dependência, uma instância que implemente a interface
EntityManager;
 Exemplo:
public class ClienteBean ... {
@PersistenceContext
EntityManager manager = null;
}
9
API EntityManager
 persist (Object entity):
– enfileira entidade para ser inserida uma entidade no banco de dados e
a torna gerenciada;
– Exemplo:
VeiculoEntity veiculo = new VeiculoEntity();
veiculo.setPlaca(“DHZ-5678”);
veiculo.setModelo(“Fusca”);
manager.persist(veiculo);
10
API EntityManager
 merge (Object entidade):
– atualiza uma entidade não gerenciada no contexto de persistência;
– Caso já exista uma entiade gerenciada com o mesmo id  realiza uma
operação de UPDATE;
– Caso contrário  realiza uma operação de INSERT;
– A entidade torna-se gerenciada;
– Exemplo:
VeiculoEntity veiculo = new VeiculoEntity();
veiculo.setPlaca(“DHZ-5678”);
veiculo.setModelo(“Fusca”);
manager.merge(veiculo);
11
API EntityManager
 refresh (Object entidade):
– Atualiza dados da entidade com base no banco de dados;
– Valores não persistidos são descartados;
– A entidade torna-se gerenciada;
– Exemplo:
VeiculoEntity veiculo = new VeiculoEntity();
veiculo = manager.find(VeiculoEntity.class, 1);
veiculo.setPlaca(“DHZ-5678”);
veiculo.setModelo(“Fusca”);
manager.refresh(veiculo);
12
API EntityManager
 find (Class classeEntidade, Object PK):
– localiza uma entidade através de sua chave primária (PK);
– Retorna null caso a entidade não seja localizada;
– Uma entidade localizada torna-se automaticamente gerenciada;
– Exemplo:
// Busca veiculo com id igual a 10
VeiculoEntity veiculo =
manager.find(VeiculoEntity.class, 10);
veiculo.setPlaca(“HHH-7777”);
13
API EntityManager
 remove (Object entidade):
– Remove uma entidade acoplada;
– Para excluir entidades desacopladas primeiro deve-se localizá-la
através do método find ou getReference;
– Exemplo:
VeiculoEntity veiculo =
manager.find(VeiculoEntity.class, 10);
manager.remove(veiculo);
14
Download

JPA