Arquitetura Java Persistence API (JPA)
A persistência de dados é a possibilidade de manter os dados entre as execuções do aplicativo. A persistência é vital para os aplicativos corporativos por causa do acesso necessário aos bancos de dados relacionais. Os aplicativos que forem desenvolvidos para este ambiente devem gerenciar a persistência por si só ou usar soluções de terceiros para manipular as atualizações e recuperações do banco de dados com persistência. O Java™ Persistence API (JPA) fornece um mecanismo para gerenciar a persistência e mapeamento relacional de objeto e funções para as especificações de EJB.
A especificação JPA define o mapeamento relacional de objetos internamente, em vez de depender das implementações de mapeamento específicas do fornecedor. A JPA está baseada no modelo de programação Java que se aplica aos ambientes Java EE, mas a JPA pode funcionar em um ambiente Java SE para teste das funções do aplicativo.
- A API EntityManager pode persistir, atualizar, recuperar ou remover objetos de um banco de dados
- A API EntityManager e os metadados de mapeamento de objeto relacional manipulam a maioria das operações do banco de dados sem precisar gravar o código JDBC ou SQL para manter a persistência.
- A JPA fornece uma linguagem de consulta, estendendo a linguagem de consulta EJB independente (também conhecida como JPQL), que pode ser utilizada para recuperar objetos sem a gravação de consultas SQL específicas do banco de dados com o qual se está trabalhando.
A JPA foi projetada para operar dentro e fora de um contêiner Java Enterprise Edition (Java EE). Ao executar a JPA em um contêiner, os aplicativos podem usar o contêiner para gerenciar o contexto de persistência. Se não houver contêiner para gerenciar a JPA, o aplicativo deverá manipular o gerenciamento do contexto de persistência sozinho. Os aplicativos projetados para persistência gerenciada por contêiner não exigem muita implementação de código para tratar a persistência, mas esses aplicativos não podem ser utilizados fora de um contêiner. Aplicativos que gerenciam sua própria persistência podem funcionar em um ambiente de contêiner ou ambiente Java SE.
- Unidade de persistência
- Consiste nos metadados declarativos que descrevem o relacionamento de objetos de classe de entrada para um banco de dados relacional. O EntityManagerFactory utiliza esses dados para criar um contexto de persistência que possa ser acessado por meio do EntityManager.
- EntityManagerFactory
- Usado para criar um EntityManager para interações com o banco de dados. Os contêineres do servidor de aplicativos normalmente fornecem essa função, mas o EntityManagerFactory será necessário se você estiver utilizando a persistência gerenciada pelo aplicativo JPA. Uma instância do EntityManagerFactory representa um Contexto de Persistência.
- Contexto de persistência
- Define o conjunto de instâncias ativas que o aplicativo está manipulando atualmente. O contexto de persistência pode ser criado manualmente ou por meio de injeção.
- EntityManager
- O gerenciador de recursos que mantém a coleção ativa de objetos de entidade que estão sendo usados pelo aplicativo. O EntityManager manipula a interação do banco de dados e os metadados para mapeamentos
de objetos relacionais. Uma instância do
EntityManager representa um Contexto de Persistência. Um aplicativo
em um contêiner pode obter o EntityManager por meio de introdução no aplicativo ou
consultando-o no espaço de nomes de componentes Java. Se o aplicativo gerenciar
sua persistência, o EntityManager será obtido do EntityManagerFactory. Atenção: A injeção do EntityManager é suportada apenas para os seguintes artefatos:
- Beans de sessão EJB 3.x
- Beans acionados por mensagens EJB 3.x
- Servlets, Filtros de Servlet e Listeners
- Identificadores de tag JSP que implementam as interfaces javax.servlet. jsp.tagext.Tag e javax.servlet.jsp.tagext.SimpleTag
- Beans gerenciados do JavaServer Faces (JSF)
- a classe principal do aplicativo cliente.
- Objetos de entidade
- Uma classe Java simples que representa uma linha em uma tabela de banco de dados em sua forma mais simples. Os objetos de entidade podem ser classes concretas ou abstratas. Elas mantêm os estados utilizando propriedades ou campos.