Articulo de referencia

Persistencia de Yakarta

Jakarta Persistence , también conocido como JPA (abreviatura del nombre anterior Java Persistence API ), es una especificación de interfaz de programación de aplicaciones de Jak...

Jakarta Persistence , también conocido como JPA (abreviatura del nombre anterior 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 abarca tres áreas:

Historia

La fecha de lanzamiento final de la especificación JPA 1.0 fue el 11 de mayo de 2006 como parte del 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 se publicó el 22 de abril de 2013 (la plataforma Java EE 7 requiere JPA 2.1 [ 2 ] ). La especificación JPA 2.2 se publicó en el verano de 2017. La implementación de referencia para JPA 1 y 2 fue EclipseLink .

Jakarta Persistence 3.1 se lanzó en la primavera de 2022 como parte de Jakarta EE 10. [ 3 ] Jakarta Persistence 3.2 se lanzó en la primavera de 2024, con el objetivo de incluirlo en Jakarta EE 11. [ 4 ] EclipseLink e Hibernate son implementaciones compatibles.

Entidades

Una entidad persistente es una clase Java ligera cuyo estado se almacena en una tabla de una base de datos relacional . Las instancias de dicha entidad corresponden a filas individuales de la tabla. Las entidades suelen tener relaciones con otras entidades, y estas relaciones se expresan mediante metadatos de mapeo objeto-relacional (ORM). Estos metadatos pueden especificarse directamente en el archivo de la clase de la entidad mediante anotaciones o en un archivo descriptor XML independiente que se distribuye con la aplicación.

Ejemplo

Un ejemplo de clase de entidad con metadatos ORM declarados mediante anotaciones (las declaraciones de importación y los métodos setter/getter se omiten para simplificar).

@Entity public class Person { @Id private long id ; private String firstName ; private String lastName ; private int age ; }

La @Entityanotación declara que la clase representa una entidad. @IdDeclara el atributo que actúa como clave primaria de la entidad. Se pueden usar anotaciones adicionales para declarar metadatos adicionales (por ejemplo, cambiar el nombre de la tabla predeterminada en la @Tableanotación) o para crear asociaciones entre entidades.

Lenguaje de consulta

El lenguaje de consulta de persistencia de Yakarta (JPQL; anteriormente conocido como lenguaje de consulta de persistencia de Java) permite realizar consultas sobre entidades almacenadas en una base de datos relacional. Las consultas tienen una sintaxis similar a las consultas SQL , pero operan sobre objetos de entidad en lugar de directamente sobre las tablas de la base de datos.

Motivación

Antes de la introducción de la especificación EJB 3.0, muchos desarrolladores de Java empresarial utilizaban objetos persistentes ligeros proporcionados por marcos de persistencia (como Hibernate ) u objetos de acceso a datos (DAO) en lugar de beans de entidad . Esto se debía a que los beans de entidad, en las especificaciones EJB anteriores, requerían un código muy complejo y consumían muchos recursos, y solo podían utilizarse en servidores de aplicaciones Java EE debido a las interconexiones y dependencias en el código fuente entre los beans y los objetos DAO o los marcos 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 proyectos como Hibernate y TopLink Essentials se convirtieron en implementaciones de la especificación de la API de persistencia de Java.

Enterprise Beans

La especificación EJB 3.0 (que forma parte de la plataforma Java EE 5) incluía una definición de la API de persistencia de Java. Sin embargo, los desarrolladores no necesitan un contenedor EJB ni un servidor de aplicaciones Java EE para ejecutar aplicaciones que utilicen esta API de persistencia. [ 5 ] Las futuras versiones de la API de persistencia de Java se definirán en una especificación y un JSR independientes , en lugar de en la especificación/JSR de 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 de persistencia de Java se desarrolló, en parte, para unificar la API de objetos de datos de Java y la API de persistencia gestionada por el contenedor (CMP) de EJB 2.0. La mayoría de los productos que admiten ambas API también admiten la API de persistencia de Java.

La API de persistencia de Java especifica la persistencia únicamente para sistemas de gestión de bases de datos relacionales, centrándose en el mapeo objeto-relacional (ORM). Algunos proveedores de JPA admiten otros modelos de bases de datos , aunque esto queda fuera del alcance del diseño de JPA. La sección de introducción de la especificación JPA establece: "El objetivo técnico de este trabajo es proporcionar una herramienta de mapeo objeto-relacional para el desarrollador de aplicaciones Java que utilice un modelo de dominio Java para gestionar una base de datos relacional". [ 6 ]

La especificación Java Data Objects admite ORM, así como 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 grafos y muchos otros almacenes de datos.

Hibernar

Hibernate, fundado por Gavin King, proporciona un marco de mapeo objeto-relacional de código abierto para Java . Las versiones 3.2 y posteriores proporcionan una implementación para la API de persistencia de Java. [ 7 ] [ 8 ] King representó a JBoss en JSR 220, [ 9 ] el grupo de expertos de JCP encargado del desarrollo de JPA. Esto dio lugar a una controversia y especulación continuas en torno a la relación entre JPA e Hibernate. Sun Microsystems declaró [ 10 ] que las ideas provenían de varios marcos, incluidos Hibernate y Java Data Objects .

Spring Data JPA

Spring Data JPA es una implementación de la abstracción de repositorio que es un componente clave del diseño orientado al dominio basado en el framework de aplicaciones Java Spring . Admite de forma transparente todas las implementaciones de JPA disponibles y admite operaciones CRUD , así como la ejecución conveniente de consultas a la base de datos. [ 11 ] : 47 [ 12 ]

Historial de versiones

JPA 2.0

El desarrollo de una nueva versión de JPA 2.0 comenzó en julio de 2007 en el Java Community Process como JSR 317. JPA 2.0 fue aprobada como versión final el 10 de diciembre de 2009. El objetivo de JPA 2.0 era abordar características presentes en algunos de los proveedores ORM más populares, pero que no lograron la aprobación por consenso para JPA 1.0.

Las principales características incluidas fueron:

  • Funcionalidad de mapeo objeto-relacional ampliada
    • 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 respaldar la generación de DDL.
  • Soporte para la validación
  • Compatibilidad con caché de objetos compartidos.

Proveedores que admiten JPA 2.0:

JPA 2.1

El desarrollo de la versión 2.1 de JPA comenzó en julio de 2011 como JSR 338. JPA 2.1 fue aprobada como versión final el 22 de mayo de 2013.

Las principales características incluidas fueron:

  • Convertidores que permiten conversiones de código personalizadas entre tipos de bases de datos y objetos.
  • Actualización/eliminación de criterios para permitir actualizaciones y eliminaciones masivas a través de la API de criterios
  • Gráficos de entidades para la recuperación o fusión parcial o específica de objetos.
  • Mejoras en JPQL/Criteria, como subconsultas aritméticas, funciones genéricas de bases de datos, cláusula ON de unión y la opción TREAT.
  • Generación de esquemas
  • Compatibilidad con procedimientos almacenados

Proveedores que admiten JPA 2.1:

JPA 2.2

El desarrollo de JPA 2.2, una versión de mantenimiento, comenzó en 2017 bajo la norma JSR 338. La revisión de mantenimiento fue aprobada el 19 de junio de 2017.

Las principales características incluidas fueron:

  • La adición de @Repeatable a todas las anotaciones relevantes.
  • Compatibilidad con el uso de anotaciones JPA en metaanotaciones
  • Transmisión de resultados de consultas
  • La capacidad de los AttributeConverters para ser inyectables mediante CDI.
  • Compatibilidad con tipos de fecha y hora de Java 8

Proveedores que admiten JPA 2.2:

Jakarta Persistence 3.0

JPA pasó a llamarse Jakarta Persistence en 2019 y la versión 3.0 se lanzó en 2020. Esto incluyó el cambio de nombre de paquetes y propiedades, pasando de javax.persistence a jakarta.persistence.

Proveedores que admiten Jakarta Persistence 3.0:

Yakarta Persistencia 3.1

La versión 3.1 se publicó en 2022. [ 3 ] Forma parte de Jakarta EE 10 y, por lo tanto, requiere al menos Java 11 para ejecutarse. Añade una mejor gestión de UUID, varias funciones JPQL nuevas para operaciones matemáticas y de fecha/hora, y otros pequeños cambios. [ 15 ]

Proveedores que admiten Jakarta Persistence 3.1:

Yakarta Persistencia 3.2

La versión 3.2 se lanzó en 2024. [ 4 ] Introdujo una gran cantidad de mejoras en la API junto con algunas mejoras en el lenguaje de consulta. [ 18 ] [ 19 ]

Proveedores que admiten Jakarta Persistence 3.2:

Véase también

Referencias

  1. "Tutorial de JavaEE 6" . Oracle.
  2. "Tutorial de JavaEE 7" . Oracle.
  3. 1 2 "Jakarta Persistence 3.1" . jakarta.ee . Consultado el 27 de julio de 2022 .
  4. 1 2 "Jakarta Persistence 3.2" . jakarta.ee . Consultado el 27 de mayo de 2025 .
  5. Hibernate EntityManager: Entornos Java SE Hibernate EntityManager: Obtención de un EntityManager en un entorno Java SE
  6. "Persistencia de Yakarta" . jakarta.ee . Consultado el 5 de octubre de 2021 .
  7. "hibernate.org - Persistencia Java con Hibernate" . JBoss . Consultado el 17 de noviembre de 2008. Hibernate implementa la API Java de persistencia objeto/relacional y las interfaces de gestión de persistencia .
  8. Persistencia en Java con Hibernate . Manning Publications. 8 de noviembre de 2015. ISBN 9781617290459Consultado el 8 de diciembre de 2013. Gavin King es el fundador del proyecto Hibernate .
  9. "JBoss.com - Liderazgo en 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
  10. "Preguntas frecuentes sobre la API de persistencia de Java" . Sun Microsystems. Archivado del original el 22/08/2008 . Consultado el 01/07/2010 . La API de persistencia de Java se basa en las mejores ideas de tecnologías de persistencia como Hibernate, TopLink y JDO.
  11. Deinum et al. 2014 .
  12. "Spring Data - Sitio web del proyecto" . Pivotal . Consultado el 26 de febrero de 2018 .
  13. "Paquete de características de IBM WebSphere Application Server V7 para aplicaciones OSGi y API de persistencia de Java" . Sitio web de descarga . IBM. 27 de abril de 2010. Consultado el 8 de diciembre de 2013 .
  14. "Descarga de Versant JPA en 2 pasos" . Sitio web de descarga . Actian . Archivado del original el 8 de diciembre de 2013. Consultado el 8 de diciembre de 2013 .
  15. "Novedades de Jakarta Persistence 3.1" . Fundación Eclipse.
  16. "Resultados TCK de EclipseLink" . Fundación Eclipse . Consultado el 27 de julio de 2022 .
  17. "Hibernate ORM 6.0 series" . hibernate.org . Consultado el 27 de julio de 2022 .
  18. "Resumen de Jakarta Persistence 3.2" . Hibernate. Abril de 2024.
  19. 1 2 3 "Jakarta Persistence 3.2" . Fundación Eclipse.

Lecturas adicionales

  • Deinum, Marten; Rubio, Daniel; Long, Josh; Mak, Gary (1 de septiembre de 2014). Recetas de primavera: Un enfoque de problema-solución (Segunda  edición). Apress . ISBN 978-1-4302-2499-0.

Información general

  • Sitio web oficialEdit this at Wikidata
  • Documentación para la versión final de la especificación EJB3 (denominada JSR220)
  • Página de persistencia de GlassFish. Enlace obsoleto archivado el 12/01/2013 en archive.today.
  • Página de persistencia de JCP

Tutoriales

  • Javadoc de API de persistencia de Java EE 6
  • Tutorial de la API de persistencia de Java EE 6
  • Javadoc de API de persistencia de Java EE 7
  • Tutorial de la API de persistencia de Java EE 7
  • Tutorial sobre persistencia en Java EE 5
  • Guía de especificaciones de Jakarta EE - Explicación de la persistencia
  • Guía de inicio de Jakarta EE: Cómo almacenar y recuperar datos usando Jakarta Persistence
  • Tutorial oficial de Jakarta EE: Introducción a la persistencia de Yakarta