140 likes | 329 Views
JPA - API Prof. Leandro Rubim profleandror@fiap.com.br leandro.fiap@gmail.com. Agenda. JPA EntityManager Definições Contexto Persistência Obtendo um EntityManager Transações API EntityManager. JPA. Conjunto de anotações para mapeamento O/R; API para persistência de entidades;
E N D
JPA - API Prof. Leandro Rubim profleandror@fiap.com.br leandro.fiap@gmail.com
Agenda • JPA • EntityManager • Definições • Contexto Persistência • Obtendo um EntityManager • Transações • API EntityManager
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;
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;
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;
Contexto Persistência • Ponte entre entidades na memória e banco de dados; • Gerenciada por um Entity Manager; Contexto BD Entidade Entity Manager
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;
Diagrama de Estado Entidade new() new persist() refresh() remove() removed managed persist() • Contexto fechado • Commit • Serialização merge() detached
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; }
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);
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);
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);
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”);
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);