Persistência de Jacarta - Jakarta Persistence
Jakarta Persistence ( JPA ; anteriormente Java Persistence API) é uma especificação de interface de programação de aplicativo Jakarta EE que descreve o gerenciamento de dados relacionais em aplicativos Java corporativos .
A persistência neste contexto cobre três áreas:
- A própria API , definida no
javax.persistencepacote - A Jakarta Persistence Query Language (JPQL; anteriormente Java Persistence Query Language)
- Metadados de objeto / relacionais
A implementação de referência para JPA é EclipseLink .
História
A data de lançamento final da especificação JPA 1.0 foi 11 de maio de 2006 como parte do Java Community Process JSR 220. A especificação JPA 2.0 foi lançada em 10 de dezembro de 2009 (a plataforma Java EE 6 requer JPA 2.0). A especificação JPA 2.1 foi lançada em 22 de abril de 2013 (a plataforma Java EE 7 requer JPA 2.1). A especificação JPA 2.2 foi lançada no verão de 2017.
Entidades
Uma entidade de persistência é uma classe Java leve com seu estado geralmente persistido em uma tabela em um banco de dados relacional . As instâncias de tal entidade correspondem a linhas individuais na tabela. As entidades normalmente têm relacionamentos com outras entidades, e esses relacionamentos são expressos por meio de metadados objeto / relacionais. Esses metadados podem ser especificados diretamente no arquivo de classe de entidade usando anotações ou em um arquivo descritor XML separado distribuído com o aplicativo.
Linguagem de consulta
A Jakarta Persistence Query Language (JPQL; anteriormente Java Persistence Query Language) faz consultas em entidades armazenadas em um banco de dados relacional. As consultas assemelham-se às consultas SQL na sintaxe, mas operam em objetos de entidade em vez de diretamente em tabelas de banco de dados.
Motivação
Antes da introdução da especificação EJB 3.0, muitos desenvolvedores Java corporativos usavam objetos persistentes leves fornecidos por estruturas de persistência (como Hibernate ) ou objetos de acesso a dados em vez de usar beans de entidade . Isso ocorre porque os beans de entidade, nas especificações EJB anteriores, exigiam um código muito complicado e impunham uma pegada pesada de recursos, e eles podiam ser usados apenas em servidores de aplicativos Java EE por causa das interconexões e dependências no código-fonte entre os beans e objetos DAO ou persistência frameworks. Portanto, muitos dos recursos originalmente apresentados em estruturas de persistência de terceiros foram incorporados à API Java Persistence, e projetos como Hibernate e TopLink Essentials tornaram-se implementações da especificação Java Persistence API.
Tecnologias relacionadas
Enterprise Beans
A especificação EJB 3.0 (ela própria parte da plataforma Java EE 5) incluía uma definição da API Java Persistence. No entanto, os desenvolvedores não precisam de um contêiner EJB ou de um servidor de aplicativos Java EE para executar aplicativos que usam esta API de persistência. As versões futuras da Java Persistence API serão definidas em um JSR e especificação separados, em vez de no JSR / especificação EJB.
A Java Persistence API substitui a solução de persistência do EJB 2.0 CMP (Container-Managed Persistence).
API Java Data Objects
A Java Persistence API foi desenvolvida em parte para unificar a API Java Data Objects e a API EJB 2.0 Container Managed Persistence (CMP). A maioria dos produtos que dão suporte a cada uma das duas APIs oferecem suporte à Java Persistence API.
A Java Persistence API especifica persistência apenas para sistemas de gerenciamento de banco de dados relacional, concentrando-se no mapeamento objeto-relacional (ORM). Alguns provedores de JPA suportam outros modelos de banco de dados , embora isso esteja fora do escopo do design do JPA. A seção de introdução da especificação JPA afirma: "O objetivo técnico deste trabalho é fornecer um recurso de mapeamento objeto / relacional para o desenvolvedor de aplicativos Java usando um modelo de domínio Java para gerenciar um banco de dados relacional."
A especificação Java Data Objects suporta ORM, bem como persistência para outros tipos de modelos de banco de dados, por exemplo, bancos de dados de arquivo simples e bancos de dados NoSQL , incluindo bancos de dados de documentos , bancos de dados gráficos e muitos outros datastores.
API Service Data Object
Os designers da Java Persistence API objetivaram fornecer persistência relacional, com muitas das principais áreas retiradas de ferramentas de mapeamento objeto-relacional , como Hibernate e TopLink . O Java Persistence API melhorou e substituiu o EJB 2.0, evidenciado por sua inclusão no EJB 3.0. A API Service Data Objects (SDO) (JSR 235) tem um objetivo muito diferente daquele da Java Persistence API e é considerada complementar. A API SDO é projetada para arquiteturas orientadas a serviços , vários formatos de dados, em vez de apenas dados relacionais e várias linguagens de programação. O Java Community Process gerencia a versão Java da API SDO; a versão C ++ da API SDO é gerenciada via OASIS .
Hibernar
O Hibernate, fundado por Gavin King, fornece uma estrutura de mapeamento objeto-relacional de código aberto para Java . As versões 3.2 e posteriores fornecem uma implementação para a Java Persistence API. King representou a JBoss no JSR 220, o grupo de especialistas JCP encarregado de desenvolver JPA. Isso gerou polêmica e especulação em torno da relação entre o JPA e o Hibernate. A Sun Microsystems afirmou que as ideias vieram de vários frameworks, incluindo Hibernate e Java Data Objects .
Spring Data JPA
O Spring Data JPA é uma implementação da abstração do repositório que é um bloco de construção chave do design orientado a domínio com base na estrutura do aplicativo Java Spring . Ele suporta de forma transparente todas as implementações JPA disponíveis e suporta operações CRUD , bem como a execução conveniente de consultas de banco de dados.
Histórico de versão
JPA 2.0
O desenvolvimento de uma nova versão do JPA 2.0 foi iniciado em julho de 2007 no Java Community Process como JSR 317. O JPA 2.0 foi aprovado como final em 10 de dezembro de 2009. O foco do JPA 2.0 era abordar recursos que estavam presentes em alguns dos populares Fornecedores de ORM, mas não conseguiram obter aprovação de consenso para JPA 1.0.
Os principais recursos incluídos foram:
- Funcionalidade de mapeamento objeto-relacional expandida
- Suporte para coleções de objetos incorporados, vinculados no ORM com um relacionamento muitos-para-um
- Listas ordenadas
- Combinações de tipos de acesso
- Uma API de consulta de critérios
- Padronização de dicas SQL
- Padronização de metadados adicionais para suportar a geração de DDL
- Suporte para validação
- Suporte a cache de objeto compartilhado.
Fornecedores que suportam JPA 2.0:
- Batoo JPA
- DataNucleus (anteriormente JPOX)
- EclipseLink (anteriormente Oracle TopLink )
- IBM , para WebSphere Application Server
- JBoss com Hibernate
- ObjectDB
- OpenJPA
- OrientDB
- Versant Corporation JPA ( banco de dados de objetos )
JPA 2.1
O desenvolvimento da versão 2.1 do JPA começou em julho de 2011 como JSR 338. O JPA 2.1 foi aprovado como final em 22 de maio de 2013.
Os principais recursos incluídos foram:
- Conversores, que permitem conversões de código personalizado entre banco de dados e tipos de objeto
- Atualização / exclusão de critérios para permitir atualizações e exclusões em massa por meio da API de critérios
- Gráficos de entidade para busca ou fusão parcial ou especificada de objetos.
- Aprimoramentos de JPQL / Critérios, como subconsultas aritméticas, funções de banco de dados genéricas, cláusula de junção ON e a opção TREAT.
- Geração de esquema
- Suporte para procedimentos armazenados
Fornecedores que suportam JPA 2.1:
- DataNucleus
- EclipseLink
- Hibernar
- OpenJPA (a partir da versão 2.2.0)
JPA 2.2
O desenvolvimento do JPA 2.2, uma versão de manutenção, começou em 2017 sob JSR 338. A revisão de manutenção foi aprovada em 19 de junho de 2017.
Os principais recursos incluídos foram:
- A adição de @Repeatable a todas as anotações relevantes
- Suporte para anotações JPA a serem usadas em metaanotações
- Streaming para resultados de consulta
- A capacidade dos AttributeConverters serem injetáveis por CDI
- Suporte para tipos de data e hora Java 8
Fornecedores que suportam JPA 2.2:
- DataNucleus (da versão 5.1)
- EclipseLink (da versão 2.7)
- Hibernate (da versão 5.3)
- OpenJPA (da versão 3.0.0)
Jakarta Persistence 3.0
O JPA foi renomeado como Jakarta Persistence em 2019 e a versão 3.0 foi lançada em 2020. Isso incluiu a renomeação de pacotes e propriedades de javax.persistence para jakarta.persistence.
Fornecedores que suportam Jakarta Persistence 3.0:
- DataNucleus (a partir da versão 6.0)
- EclipseLink (da versão 3.0)
- Hibernate (da versão 5.5)
Veja também
Referências
links externos
Informações gerais
-
Website oficial
- Documentação para a versão final da especificação EJB3 (chamada JSR220)
- Página de persistência do GlassFish
- Página de persistência JCP
Tutoriais
- Java EE 6 Persistence API Javadoc
- Tutorial da Java EE 6 Persistence API
- Java EE 7 Persistence API Javadoc
- Tutorial da Java EE 7 Persistence API
- Persistência no tutorial Java EE 5