Jakarta Persistence ( JPA ; anteriormente Java Persistence API) es una especificación de interfaz de programación de aplicaciones de Jakarta EE que describe la gestión de datos relacionales en aplicaciones Java empresariales .
La persistencia en este contexto cubre tres áreas:
- la propia API , definida en el
javax.persistence
paquete - el Jakarta Persistence Query Language (JPQL; anteriormente Java Persistence Query Language)
- objeto / metadatos relacionales
La implementación de referencia para JPA es EclipseLink .
Historia
La fecha de lanzamiento final de la especificación JPA 1.0 fue el 11 de mayo de 2006 como parte de Java Community Process JSR 220. La especificación JPA 2.0 se publicó el 10 de diciembre de 2009 (La plataforma Java EE 6 requiere JPA 2.0. [1] ) La especificación JPA 2.1 fue lanzado el 22 de abril de 2013 (La plataforma Java EE 7 requiere JPA 2.1. [2] ). La especificación JPA 2.2 (una versión menor) se lanzó en el verano de 2017.
Entidades
Una entidad de persistencia es una clase Java liviana cuyo estado generalmente persiste en una tabla en una base de datos relacional . Las instancias de dicha entidad corresponden a filas individuales en la tabla. Las entidades suelen tener relaciones con otras entidades, y estas relaciones se expresan a través de metadatos relacionales o de objeto. Los metadatos de objeto / relacionales se pueden especificar directamente en el archivo de clase de entidad mediante anotaciones o en un archivo descriptor XML separado distribuido con la aplicación.
Lenguaje de consulta
La persistencia Lenguaje de consulta Yakarta (JPQL, anteriormente Java Persistence Query Language) hace que las consultas contra entidades almacenadas en una base de datos relacional. Las consultas se parecen a las consultas SQL en sintaxis, pero operan contra objetos de entidad en lugar de directamente con tablas de base de datos.
Motivación
Antes de la introducción de la especificación EJB 3.0, muchos desarrolladores empresariales de Java usaban objetos persistentes livianos, proporcionados por marcos de persistencia (por ejemplo, Hibernate ) u objetos de acceso a datos en lugar de beans de entidad . Esto se debe a que los beans de entidad, en las especificaciones de EJB anteriores, exigían un código demasiado complicado y una gran cantidad de recursos, y solo podían usarse en servidores de aplicaciones Java EE debido a las interconexiones y dependencias en el código fuente entre beans y objetos DAO o marco de persistencia. . Por lo tanto, muchas de las características presentadas originalmente en marcos de persistencia de terceros se incorporaron a la API de persistencia de Java y, a partir de 2006, proyectos como Hibernate (versión 3.2) y TopLink Essentials se han convertido en implementaciones de la especificación de la API de persistencia de Java.
Tecnologías relacionadas
Beans empresariales
La especificación EJB 3.0 (en sí misma parte de la plataforma Java EE 5) incluía una definición de la API de persistencia de Java. Sin embargo, los usuarios finales no necesitan un contenedor EJB o un servidor de aplicaciones Java EE para ejecutar aplicaciones que utilizan esta API de persistencia. [3] Las versiones futuras de la API de persistencia de Java se definirán en un JSR y una especificación separados en lugar de en la especificación JSR / EJB.
La API de persistencia de Java reemplaza la solución de persistencia de EJB 2.0 CMP (Container Managed Persistence).
API de objetos de datos de Java
La API Java Persistence se desarrolló en parte para unificar la API Java Data Objects y la API EJB 2.0 Container Managed Persistence (CMP) . A partir de 2009[actualizar] la mayoría de los productos que admiten cada una de esas API admiten la API de persistencia de Java.
La API de persistencia de Java especifica la persistencia solo para los sistemas de gestión de bases de datos relacionales . Es decir, JPA se centra en el mapeo relacional de objetos (ORM) (tenga en cuenta que hay proveedores de JPA que admiten otros modelos de base de datos además de la base de datos relacional, pero esto está fuera del alcance de lo que fue diseñado JPA). Consulte la introducción de la sección 1 de la especificación JPA 2 para obtener una aclaración del papel de JPA, que establece muy claramente: "El objetivo técnico de este trabajo es proporcionar una función de mapeo relacional / de objetos para el desarrollador de aplicaciones Java utilizando un modelo de dominio Java para gestionar un base de datos."
La especificación Java Data Objects admite ORM, así como la persistencia en otros tipos de modelos de bases de datos, por ejemplo , bases de datos de archivos planos y bases de datos NoSQL , incluidas bases de datos de documentos , bases de datos de gráficos , así como literalmente cualquier otro almacén de datos concebible [ cita requerida ] .
API de objeto de datos de servicio
Los diseñadores [4] de la API de persistencia de Java tenían como objetivo proporcionar persistencia relacional, con muchas de las áreas clave tomadas de herramientas de mapeo relacional de objetos como Hibernate y TopLink . La API de persistencia de Java mejoró y reemplazó a EJB 2.0, como lo demuestra su inclusión en EJB 3.0. La API de objetos de datos de servicio (SDO) (JSR 235) tiene un objetivo muy diferente a la API de persistencia de Java y se considera [5] [6] complementaria. La API SDO está diseñada para arquitecturas orientadas a servicios , múltiples formatos de datos en lugar de solo datos relacionales y múltiples lenguajes de programación. El Java Community Process administra la versión Java de la API de SDO; la versión C ++ de la API SDO se administra a través de OASIS .
Hibernar
Hibernate proporciona un marco de trabajo de mapeo relacional de objetos de código abierto para Java . Las versiones 3.2 y posteriores proporcionan una implementación para la API de persistencia de Java. [7] Gavin King fundó el proyecto Hibernate. [8] Representó a JBoss en JSR 220, [9] el grupo de expertos de JCP encargado de desarrollar JPA. Esto condujo a una controversia y especulaciones continuas en torno a la relación entre JPA e Hibernate. Sun Microsystems ha declarado [10] que las ideas provienen de varios marcos, incluidos Hibernate y Java Data Objects .
Spring Data JPA [11]
Una implementación de la abstracción del repositorio que es un componente clave del diseño dirigido por dominios basado en el marco de aplicaciones de Java Spring . Admite de forma transparente todas las implementaciones de JPA disponibles y admite operaciones CRUD , así como la ejecución conveniente de consultas de base de datos.
Historial de versiones
JPA 2.0
El desarrollo de una nueva versión de JPA 2.0 se inició en julio de 2007 en Java Community Process como JSR 317. JPA 2.0 fue aprobado como final el 10 de diciembre de 2009. El enfoque de JPA 2.0 era abordar las características que estaban presentes en algunos de los populares Proveedores de ORM, pero no pudieron obtener la aprobación por consenso para JPA 1.0.
Las principales características incluidas fueron:
- Funcionalidad ampliada de mapeo relacional de objetos
- soporte para colecciones de objetos incrustados, vinculados en el ORM con una relación de muchos a uno
- listas ordenadas
- combinaciones de tipos de acceso
- Una API de consulta de criterios
- estandarización de sugerencias SQL
- estandarización de metadatos adicionales para apoyar la generación de DDL
- soporte para validación
- Soporte de caché de objetos compartidos.
Proveedores que admiten JPA 2.0:
- Batoo JPA
- DataNucleus (anteriormente JPOX)
- EclipseLink (anteriormente Oracle TopLink )
- IBM , para WebSphere Application Server [12]
- JBoss con Hibernate
- Kundera
- ObjectDB
- OpenJPA
- OrientDB de Orient Technologies
- Versant Corporation JPA (base de datos de objetos no relacional) [13]
JPA 2.1
El desarrollo de una nueva versión de JPA 2.1 se inició en julio de 2011 como JSR 338. JPA 2.1 se aprobó como final el 22 de mayo de 2013.
Las principales características incluidas fueron:
- Convertidores: permiten conversiones de código personalizado entre bases de datos y tipos de objetos.
- Actualización / eliminación de criterios: permite actualizaciones masivas y eliminaciones a través de la API de criterios.
- Gráficos de entidad: permiten la obtención o fusión parcial o especificada de objetos.
- Mejoras de JPQL / Criteria: subconsultas aritméticas, funciones de base de datos genéricas, cláusula de unión ON, opción TREAT.
- Generación de esquemas
- Procedimientos almacenados: permite definir consultas para los procedimientos almacenados de la base de datos.
Proveedores que admiten JPA 2.1
- DataNucleus
- EclipseLink
- Hibernar
- OpenJPA (desde la versión 2.2.0)
JPA 2.2
El desarrollo de una versión de mantenimiento como JPA 2.2 se inició en 2017 bajo JSR 338. La revisión de mantenimiento se aprobó el 19 de junio de 2017.
Las principales características incluidas fueron:
- Agregue @Repetible a todas las anotaciones relevantes
- Permita que todas las anotaciones JPA se utilicen en meta-anotaciones.
- Agregue la capacidad de transmitir el resultado de una consulta
- Permitir que AttributeConverters sea inyectable de CDI
- Admite los tipos de fecha y hora de Java 8
Proveedores que admiten JPA 2.2
- DataNucleus (desde la versión 5.1)
- EclipseLink (desde la versión 2.7)
- Hibernate (desde la versión 5.3)
- OpenJPA (desde la versión 3.0.0)
Yakarta JPA 3.0
El cambio de nombre de la API de JPA a Jakarta Persistence ocurrió en 2019, seguido del lanzamiento de v3.0 en 2020.
Las principales características incluidas fueron:
- Cambie el nombre de todos los paquetes de javax.persistence a jakarta.persistence.
- Cambiar el nombre del prefijo de todas las propiedades de javax.persistence a jakarta.persistence.
Proveedores que admiten Jakarta JPA 3.0
- DataNucleus (desde la versión 6.0)
- EclipseLink (desde la versión 3.0)
Trabajo futuro
La información de especificaciones futuras de JPA está disponible aquí:
- Listas de correo de especificación JPA
- Especificación JPA en GitHub
En noviembre de 2015, Linda DeMichiel anunció en el correo de usuarios de especificaciones javaee que Lukas Jungmann asumió el cargo de líder de especificación. El anuncio de Linda también decía, "[planeamos hacer un MR para JPA 2.2 en el marco de tiempo de Java EE 8". [14] [15] [16]
Herramientas
- NetBeans Jeddict
- Eclipse JPA (Dali)
Ver también
- API de persistencia de .NET (NPA)
- JDBC
- MyBatis
- OpenXava
- pureQuery
- Servidor de aplicaciones SAP NetWeaver
- XQJ
Referencias
- ^ "Tutorial de JavaEE 6" . Oráculo.
- ^ "Tutorial de JavaEE 7" . Oráculo.
- ^ Hibernate EntityManager: entornos Java SE
Hibernate EntityManager: Obtención de un EntityManager en un entorno Java SE - ^ "Miembros JSR 220" .
- ^ Barreto, Charlton. "SDO y JPA" . Paseo digital . Archivado desde el original el 13 de agosto de 2011 . Consultado el 5 de mayo de 2011 .
- ^ Edwards, Mike. "Arquitectura de persistencia SDO y Java (JPA)" . Abra SOA . osoa.org . Consultado el 5 de mayo de 2011 .
- ^ "hibernate.org - Persistencia de Java con Hibernate" . JBoss . Consultado el 17 de noviembre de 2008 .
Hibernate implementa el objeto de persistencia de Java / javaAPI relacional y las interfaces de gestión de persistencia
- ^ Persistencia de Java con Hibernate . Publicaciones Manning. ISBN 9781617290459. Consultado el 8 de diciembre de 2013 .
Gavin King es el fundador del proyecto Hibernate
- ^ "JBoss.com - Liderazgo de la industria" . JBoss . Consultado el 17 de noviembre de 2008 .
JSR 220, Comité de especificaciones de EJB 3.0, Gavin King, Bill Burke, Marc Fleury
- ^ "Preguntas frecuentes sobre la API de persistencia de Java" . Sun Microsystems. Archivado desde el original el 22 de agosto de 2008 . Consultado el 1 de julio de 2010 .
La API de persistencia de Java se basa en las mejores ideas de tecnologías de persistencia como Hibernate, TopLink y JDO
- ^ "Spring Data - Sitio web del proyecto" . Pivotal . Consultado el 26 de febrero de 2018 .
- ^ "IBM WebSphere Application Server V7 Feature Pack para aplicaciones OSGi y API de persistencia Java" . Descargue el sitio web . IBM. 27 de abril de 2010 . Consultado el 8 de diciembre de 2013 .
- ^ "Descarga de Versant JPA en 2 pasos" . Descargue el sitio web . Actian . Consultado el 8 de diciembre de 2013 .
- ^ "Especificación de la plataforma Java EE: [email protected]: Archivo - Proyecto Kenai" . java.net . Consultado el 8 de noviembre de 2016 .
- ^ Java (10/27/2015), JavaOne VIVO - Martes, Misión , recuperada 08/11/2016
- ^ Jungmann, Lukas (10 de octubre de 2015). "Novedades de la API de persistencia de Java (JSR 338) [CON7631]" . Catálogo de sesiones JavaOne 2015 . Archivado desde el original el 9 de noviembre de 2016 . Consultado el 11/08/2016 - a través de rainfocus.com.
enlaces externos
Información general
- Página web oficial
- Documentación para la versión final de la especificación EJB3 (llamada JSR220)
- Página de persistencia de GlassFish
- Página de persistencia de JCP
Tutoriales
- API de persistencia Java EE 6 Javadoc
- Tutorial de la API de persistencia de Java EE 6
- API de persistencia Java EE 7 Javadoc
- Tutorial de la API de persistencia de Java EE 7
- Tutorial de JPA por Prasad Kharkar
- Tutorial de JPA de Java Code Geeks
- Tutorial de JPA usando OpenJPA como implementación
- Persistencia en el tutorial de Java EE 5