Articulo de referencia

Hibernate (framework)

{{cite web|url=https://hibernate.org/orm/releases/7.0/|title=Hibernate ORM - 7.0 series |access-date=27 May 2025}} "},"latest preview version":{"wt":""},"latest preview date":{"...

Hibernate ORM (o simplemente Hibernate ) es una herramienta de mapeo objeto-relacional [ 2 ] : §1.2.2, [12] para el lenguaje de programación Java . Proporciona un marco para mapear un modelo de dominio orientado a objetos a una base de datos relacional . Hibernate maneja los problemas de desajuste de impedancia objeto-relacional reemplazando los accesos directos y persistentes a la base de datos con funciones de manejo de objetos de alto nivel. [ 3 ]

Hibernate es software libre distribuido bajo la Licencia Apache . Las versiones anteriores a la 7.0.0.Beta4 se distribuían bajo la Licencia Pública General Reducida de GNU 2.1.

La principal característica de Hibernate es la asignación de clases Java a tablas de base de datos , así como la asignación de tipos de datos Java a tipos de datos SQL . Hibernate también proporciona herramientas para la consulta y recuperación de datos. Genera llamadas SQL y libera al desarrollador del manejo manual y la conversión de objetos del conjunto de resultados.

Estándares

Hibernate ORM es una implementación compatible certificada de las especificaciones estándar de la industria Jakarta Persistence [ 4 ] (anteriormente Java Persistence API) y Jakarta Data [ 5 ] [ 6 ] .

Cartografía

La asignación de clases Java a tablas de base de datos se implementa mediante la configuración de un archivo XML o mediante anotaciones Java . Al usar un archivo XML, Hibernate puede generar código fuente básico para las clases de persistencia. Esto resulta auxiliar cuando se utilizan anotaciones. Hibernate puede usar el archivo XML o las anotaciones Java para mantener el esquema de la base de datos .

Se proporcionan instalaciones para organizar relaciones de uno a muchos y de muchos a muchos entre clases. [ 2 ] : 140–171 Además de gestionar asociaciones entre objetos, Hibernate también puede gestionar asociaciones reflexivas en las que un objeto tiene una relación de uno a muchos con otras instancias del tipo de clase .

Hibernate admite la asignación de tipos de valores personalizados. Esto hace posibles los siguientes escenarios:

  • Anulación del tipo SQL predeterminado al asignar una columna a una propiedad.
  • Asignación de enumeraciones Java a columnas como si fueran propiedades regulares. [ 2 ] : 89–90
  • Asignación de una única propiedad a varias columnas.

Definición: En una aplicación orientada a objetos, los objetos siguen los principios de la programación orientada a objetos (POO) , mientras que en el backend siguen los principios de normalización de bases de datos , lo que genera diferentes requisitos de representación. Este problema se conoce como " desajuste de impedancia objeto-relacional ". El mapeo es una forma de resolver este problema.

El mapeo informa a la herramienta ORM qué objeto de clase Java debe almacenar en qué tabla de la base de datos.

Lenguaje de consulta de Hibernate (HQL)

Hibernate proporciona un lenguaje inspirado en SQL llamado Hibernate Query Language [ 7 ] (HQL) para escribir consultas similares a SQL sobre los objetos de datos de Hibernate. Las consultas de criterios se proporcionan como una alternativa orientada a objetos a HQL. Las consultas de criterios se utilizan para modificar los objetos y proporcionar restricciones para los mismos. [ 2 ] : 347–349 HQL (Hibernate Query Language) es la versión orientada a objetos de SQL. Genera consultas independientes de la base de datos, por lo que no es necesario escribir consultas específicas de la base de datos. Sin esta capacidad, cambiar la base de datos requeriría cambiar también las consultas SQL individuales, lo que generaría problemas de mantenimiento.

Persistencia

Hibernate proporciona persistencia transparente para objetos Java simples (POJO). [ 2 ] : 37–38 El único requisito estricto para una clase persistente es un constructor sin argumentos , [ 2 ] : 39 aunque no necesariamente public. El comportamiento adecuado en algunas aplicaciones también requiere especial atención a los métodos equals(Object obj)y en las clases. [ 8 ] Hibernate recomienda proporcionar un atributo identificador, y se planea que esto sea un requisito obligatorio en una versión futura. [ 9 ]hashCode()Object

Las colecciones de objetos de datos se almacenan normalmente en clases de colección de Java, como implementaciones de las interfaces Sety List . También se admiten los genéricos de Java , introducidos en Java 5. Hibernate se puede configurar para cargar de forma diferida las colecciones asociadas. [ 2 ] : 289–293 La carga diferida es la predeterminada a partir de Hibernate 3.

Los objetos relacionados pueden configurarse para que las operaciones se propaguen de un objeto a otro. Por ejemplo, un Albumobjeto de clase padre puede configurarse para que sus operaciones se propaguen savea deletesus Trackobjetos de clase hijos.

Integración

Hibernate se puede usar tanto en aplicaciones Java independientes como en aplicaciones Java EE mediante servlets , beans de sesión EJB y componentes de servicio JBI . También se puede incluir como una característica en otros lenguajes de programación. Por ejemplo, Adobe integró Hibernate en la versión 9 de ColdFusion (que se ejecuta en servidores de aplicaciones J2EE) con una capa de abstracción de nuevas funciones y sintaxis añadidas a CFML .

Entidades y componentes

En la jerga de Hibernate , una entidad es un objeto independiente en el mecanismo de persistencia de Hibernate que puede manipularse independientemente de otros objetos. [ 2 ] : 62–74 En cambio, un componente está subordinado a una entidad y solo puede manipularse con respecto a esa entidad. Por ejemplo, un objeto Álbum puede representar una entidad; pero el objeto Pistas asociado con los objetos Álbum representaría un componente de la entidad Álbum, si se asume que las pistas solo pueden guardarse o recuperarse de la base de datos a través del objeto Álbum. A diferencia de J2EE, Hibernate puede cambiar de base de datos.

Historia

Hibernate fue creado en 2001 por Gavin King junto con sus colegas de Cirrus Technologies como una alternativa al uso de beans de entidad de estilo EJB2. El objetivo original era ofrecer mejores capacidades de persistencia que las que ofrecía EJB2, simplificando las complejidades y complementando ciertas características faltantes.

A principios de 2003, el equipo de desarrollo de Hibernate comenzó a lanzar Hibernate2, que ofrecía muchas mejoras significativas con respecto a la primera versión.

JBoss, Inc. (ahora parte de Red Hat ) contrató posteriormente a los desarrolladores principales de Hibernate para impulsar su desarrollo.

En 2005, se lanzó Hibernate versión 3.0. Las características clave incluían una nueva arquitectura Interceptor/Callback, filtros definidos por el usuario y anotaciones de JDK 5.0 ( la función de metadatos de Java ). A partir de 2010Hibernate 3 (versión 3.5.0 y posteriores) fue una implementación certificada de la especificación Java Persistence API 2.0 a través de un envoltorio para el módulo Core que proporciona conformidad con el estándar JSR 317. [ 10 ]

En diciembre de 2011, se lanzó Hibernate Core 4.0.0 Final. Esto incluye nuevas características como soporte para multitenencia , la introducción de ServiceRegistry (un cambio importante en la forma en que Hibernate crea y administra los "servicios"), una mejor apertura de sesión desde SessionFactory, una integración mejorada a través de org.hibernate.integrator.spi.Integrator y descubrimiento automático, soporte para internacionalización , códigos de mensajes en el registro y una mayor distinción entre las clases API, SPI o de implementación. [ 11 ]

En diciembre de 2012, se lanzó Hibernate ORM 4.1.9 Final. [ 12 ]

En marzo de 2013, se lanzó Hibernate ORM 4.2 Final. [ 13 ]

En diciembre de 2013, se lanzó Hibernate ORM 4.3.0 Final. [ 14 ] Incluye la API de persistencia de Java 2.1 .

En septiembre de 2015 se lanzó Hibernate ORM 5.0.2 Final. Incluye mejoras en el arranque, hibernate-java8, hibernate-spatial y compatibilidad con Karaf.

En noviembre de 2018 se lanzó Hibernate ORM 5.1.17 Final. Esta es la última versión de la serie 5.1.

En octubre de 2018 se lanzó Hibernate ORM 5.3 Final. Incluía almacenamiento en caché por herencia de la API de persistencia de Java 2.2 .

En diciembre de 2018, se lanzó Hibernate ORM 5.4.0 Final. [ 15 ]

En marzo de 2022, se lanzó Hibernate ORM 6.0.0 Final, [ 16 ] un "rediseño importante [que] ha afectado a casi todos los subsistemas de Hibernate, incluidas las API, las anotaciones de mapeo y el lenguaje de consulta". [ 17 ] La última de la serie 6.x es la versión 6.6.x con 6.6.0.Final lanzada en agosto de 2024 y con soporte limitado en 2026. [ 18 ] La serie 6.6 admite Java 11, 17, 21 y 25 y es compatible con Jakarta Persistence 3.1 y Jakarta EE 10. [ 18 ]

En mayo de 2025, se lanzó Hibernate ORM 7.0.0 Final, con soporte para Jakarta Persistence 3.2 y Jakarta Data 1.0. [ 19 ] 7.1.0.Final se lanzó en agosto de 2025 y 7.2.0.Final en diciembre de 2025. Ambas series 7.1 y 7.2 son compatibles con Java 17, 21 y 25 y con Jakarta Persistence 3.2 y Jakarta EE 11. [ 20 ] [ 21 ]

Interfaz de programación de aplicaciones

La API de Hibernate se proporciona en el paquete Javaorg.hibernate . [ 22 ]

Interfaz org.hibernate.SessionFactory

La org.hibernate.SessionFactoryinterfaz es la versión nativa equivalente del estándar JPA EntityManagerFactory. [ 2 ] : 26

Interfaz org.hibernate.Session

La org.hibernate.Sessioninterfaz [ 23 ] representa una sesión de Hibernate, es decir, el punto principal de la manipulación realizada en las entidades de la base de datos. Estas últimas actividades incluyen (entre otras cosas) la gestión del estado de persistencia ( transitorio , persistido , separado ) de los objetos, la obtención de los persistidos de la base de datos y la gestión de la delimitación de transacciones .

Se prevé que la instancia A Sessiondure lo mismo que la transacción lógica en la base de datos. Debido a esta característica, Sessionno se espera que las implementaciones sean seguras para subprocesos ni que puedan ser utilizadas por múltiples clientes.

Componentes de software

El software Hibernate incluye los siguientes componentes: [ 24 ]

  • Hibernate ORM (conocido como Hibernate Core antes de la versión 4.1 [ 25 ] ) – el software base para una solución de mapeo objeto-relacional para entornos Java [ 26 ]
  • Anotaciones de Hibernate (integradas en Hibernate Core/ORM desde la versión 3.6 [ 27 ] ) – metadatos que rigen la transformación de datos entre el modelo orientado a objetos y el modelo de base de datos relacional según la API de persistencia de Java JSR 317 (JPA 2) [ 28 ]
  • Hibernate EntityManager (integrado en Hibernate Core/ORM desde la versión 5.2 [ 29 ] ) – junto con Hibernate Annotations, un envoltorio que implementa una solución de persistencia de la API de persistencia de Java JSR 317 (JPA 2) [ 30 ]
  • Hibernate Envers: auditoría y versionado de clases persistentes [ 31 ]
  • Hibernate OGM (Object/Grid Mapper): una extensión para almacenar datos en un almacén NoSQL [ 32 ]
  • Hibernate Shards: particionamiento horizontal para múltiples bases de datos relacionales [ 33 ]
    • Si bien Hibernate Shards no es compatible con las versiones 4.x de Hibernate Core, algunas de las capacidades de Shards se integraron en Core en la versión 4.0.
  • Hibernate Search: integra la funcionalidad de la biblioteca de texto completo de Apache Lucene en el modelo Hibernate y JPA [ 34 ].
  • Herramientas de Hibernate: un conjunto de herramientas implementadas como un conjunto de complementos de Eclipse y tareas de Ant incluidas en JBoss Developer Studio [ 35 ].
  • Hibernate Validator: la implementación de referencia de JSR 303 Bean Validation [ 36 ] [ 2 ] : 49–51
  • Hibernate Processor: un procesador de anotaciones que crea clases de metamodelo estático de persistencia de Java e implementaciones de repositorio de datos de Jakarta utilizando la API de procesamiento de anotaciones conectable JSR 269 [ 37 ].
  • NHibernate : una solución de mapeo objeto-relacional para el .NET Framework [ 38 ]

Véase también

Referencias

  1. "Hibernate ORM - Serie 7.0" . Consultado el 27 de mayo de 2025 .
  2. 1 2 3 4 5 6 7 8 9 10 Bauer, King y Gregory 2015 .
  3. "Una breve guía de Hibernate 7" . docs.jboss.org .
  4. «Persistencia de Yakarta 3.2» . jakarta.ee .
  5. «Datos de Yakarta 1.0» . jakarta.ee .
  6. "Introducción a los repositorios de datos de Hibernate" . docs.jboss.org .
  7. "Una guía para el lenguaje de consulta de Hibernate" . docs.jboss.org .
  8. "Equals y HashCode" . Comunidad JBoss. Archivado del original el 16 de diciembre de 2013. Consultado el 16 de diciembre de 2013 .
  9. "Guía del usuario de Hibernate: 2.5.5. Proporcionar atributo de identificador" . Comunidad JBoss.
  10. "Hibernate 3.5.0 - Versión final" . En relación con... Abril de 2010.
  11. "Versiones - Hibernate ORM" . hibernate.org .
  12. "En relación con... Hibernate ORM 4.1.9.Final lanzado" . Archivado del original el 29/01/2013 . Recuperado el 13/12/2012 .
  13. "GC: Hibernate-core-4.2.0.Final.jar - GrepCode Java Project Source" . Archivado del original el 5 de diciembre de 2014. Consultado el 27 de noviembre de 2014 .
  14. "GC: Hibernate-core-4.3.0.Final.jar - GrepCode Java Project Source" . Archivado del original el 5 de diciembre de 2014. Consultado el 27 de noviembre de 2014 .
  15. "Versiones - Hibernate ORM" . hibernate.org .
  16. "Hibernate 6.0 Final" . hibernate.org .
  17. "Introducción a Hibernate 6" . docs.jboss.org .
  18. 1 2 "6.6 series - Hibernate ORM" . Hibernate . Consultado el 24 de febrero de 2026 .
  19. "Hibernate 7 (y Hibernate Validator 9)" . En relación con .
  20. "7.1 series - Hibernate ORM" . Hibernate . Consultado el 24 de febrero de 2026 .
  21. "7.2 series - Hibernate ORM" . Hibernate . Consultado el 24 de febrero de 2026 .
  22. "Hibernate JavaDocs" . docs.jboss.org .
  23. "Sesión (Hibernate JavaDocs)" . docs.jboss.org .
  24. "Hibernate: Persistencia relacional para Java y .NET" . Comunidad JBoss.
  25. "Lanzamiento de Hibernate ORM 4.1.0" . Comunidad JBoss. 9 de febrero de 2012.
  26. "HIBERNATE - Persistencia relacional para Java idiomático" . Comunidad JBoss.
  27. "Ya no existe el módulo hibernate-annotations" . Comunidad JBoss. 5 de abril de 2012.
  28. "Anotaciones de Hibernate" . Comunidad JBoss.
  29. "hibernate-entitymanager se fusionó con hibernate-core" . Comunidad JBoss.
  30. "Hibernate EntityManager" . Comunidad JBoss.
  31. "Hibernate Envers – Auditoría de entidades sencilla" . Comunidad JBoss.
  32. "Hibernate OGM" . Comunidad JBoss.
  33. "Hibernate Shards" . Comunidad JBoss.
  34. "Búsqueda en Hibernate" . Comunidad JBoss.
  35. "Herramientas de Hibernate para Eclipse y Ant" . Comunidad JBoss.
  36. "Validador de Hibernate" . Comunidad JBoss.
  37. "Procesador Hibernate" . Comunidad JBoss.
  38. "NHibernate" . NHibernate Forge . Consultado el 26 de abril de 2011 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )

Bibliografía

  • Linwood, Ananda; Minter, Dave (28 de mayo de 2010), Beginning Hibernate (Segunda  edición), Apress , pág.  400, ISBN 978-1-4302-2850-9Archivado del original el 5 de diciembre de 2010 , consultado el 4 de septiembre de 2010.
  • Bernard, Emmanuel; Griffin, John (30 de diciembre de 2008), Hibernate Search in Action (Primera  ed.), Manning Publications , pág.  488, ISBN 978-1-933988-64-1
  • Elliott, James; O'Brien, Tim (22 de abril de 2008), Aprovechando la hibernación (Primera  ed.), O'Reilly Media , pág.  380, ISBN 978-0-596-51772-4
  • Bauer, Christian; King, Gavin; Gregory, Gary (8 de noviembre de 2015). Persistencia en Java con Hibernate . Manning Publications . ISBN 978-1-61729-045-9.
  • Linwood, Jeff; Minter, Dave (25 de agosto de 2006), Beginning Hibernate: From Novice to Professional (Tercera  ed.), Apress , pág.  360, ISBN 1-59059-693-5Archivado del original el 24 de diciembre de 2010 , recuperado el 24 de abril de 2009.
  • Minter, Dave; Linwood, Jeff (27 de junio de 2005), Pro Hibernate 3 (Primera  ed.), Apress , 242 págs. , ISBN  1-59059-511-4
  • Iverson, Will (2 de diciembre de 2004), Hibernate: Guía para desarrolladores J2EE (Primera  edición), Addison Wesley , 384 págs. , ISBN  0-321-26819-9
  • Pugh, Eric; Gradecki, Joseph D. (8 de octubre de 2004), Professional Hibernate (Programmer to Programmer) (Primera  ed.), Wrox , pág.  456, ISBN 0-7645-7677-1Archivado del original el 4 de abril de 2009 , consultado el 26 de abril de 2009.
  • Bauer, Christian; King, Gavin (1 de agosto de 2004), Hibernate In Action (Segunda  edición), Manning Publications , 400 págs. , ISBN  1-932394-15-X
  • James, Elliott (10 de mayo de 2004), Hibernate: A Developer's Notebook (Primera  edición), O'Reilly Media , 190 págs. , ISBN  0-596-00696-9
  • Sitio web oficial
  • Hibernate en GitHub