Hibernación (marco)

Herramienta de mapeo relacional de objetos
ORM de hibernación
Desarrollador(es)Sombrero rojo
Lanzamiento inicial23 de mayo de 2001 ; hace 23 años ( 23-05-2001 )
Versión estable
6.4.4.Final / 8 de febrero de 2024 ; hace 9 meses [1] ( 08-02-2024 )
Repositorio
  • github.com/hibernate/hibernate-orm
Escrito enJava
Sistema operativoMultiplataforma ( JVM )
PlataformaMáquina virtual Java
TipoMapeo objeto-relacional
LicenciaLicencia Pública General Reducida de GNU
Sitio webhibernate.org/orm/

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 problemas de desajuste de impedancia objeto-relacional al reemplazar accesos directos y persistentes a la base de datos con funciones de manejo de objetos de alto nivel.

Hibernate es un software libre que se distribuye bajo la Licencia Pública General Reducida GNU 2.1.

La característica principal de Hibernate es la asignación de clases Java a tablas de bases de datos y de tipos de datos Java a tipos de datos SQL . Hibernate también proporciona funciones de consulta y recuperación de datos. Genera llamadas SQL y libera al desarrollador de la manipulación manual y la conversión de objetos del conjunto de resultados.

Cartografía

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

Se proporcionan facilidades 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 permite que se den los siguientes casos:

  • Reemplazar el tipo SQL predeterminado al asignar una columna a una propiedad.
  • Asignación de enumeraciones de Java a columnas como si fueran propiedades regulares. [2] : 89–90 
  • Asignar una sola propiedad a varias columnas.

Definición: Los objetos en una aplicación orientada a objetos siguen los principios de OOP , mientras que los objetos en el back-end siguen los principios de normalización de bases de datos , lo que da como resultado diferentes requisitos de representación. Este problema se denomina " desajuste de impedancia objeto-relacional ". El mapeo es una forma de resolver el problema de desajuste de impedancia objeto-relacional.

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

Lenguaje de consulta de Hibernate (HQL)

Hibernate proporciona un lenguaje inspirado en SQL llamado Hibernate Query Language (HQL) para escribir consultas similares a SQL contra los objetos de datos de Hibernate. Criteria Queries se proporcionan como una alternativa orientada a objetos a HQL. Criteria Query se utiliza para modificar los objetos y proporcionar la restricción para los objetos. [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 hay necesidad de escribir consultas específicas de la base de datos. Sin esta capacidad, cambiar la base de datos requeriría que también se cambiaran las consultas SQL individuales, lo que genera problemas de mantenimiento.

Persistencia

Hibernate proporciona persistencia transparente para objetos de 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 una atención especial a los métodos equals(Object obj)y hashCode() en las Objectclases. [3] Hibernate recomienda proporcionar un atributo de identificador, y se planea que esto sea un requisito obligatorio en una versión futura. [4]

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 opción predeterminada a partir de Hibernate 3.

Los objetos relacionados se pueden configurar para realizar operaciones en cascada de un objeto a otro. Por ejemplo, un Albumobjeto de clase principal se puede configurar para realizar operaciones en cascada de sus operaciones savey deletea sus Trackobjetos de clase secundarios.

Integración

Hibernate se puede utilizar tanto en aplicaciones Java independientes como en aplicaciones Java EE que utilicen 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 agregadas en CFML .

Entidades y componentes

En la jerga de Hibernate , una entidad es un objeto independiente en el mecanismo persistente de Hibernate que se puede manipular independientemente de otros objetos. [2] : 62–74  Por el contrario, un componente está subordinado a una entidad y se puede manipular solo 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 supone que las Pistas solo se pueden guardar o recuperar 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 y 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 ofrecidas por EJB2, simplificando las complejidades y complementando ciertas funciones 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.

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

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

En diciembre de 2011 se lanzó Hibernate Core 4.0.0 Final. Incluye nuevas características como compatibilidad con múltiples inquilinos, introducción de ServiceRegistry (un cambio importante en la forma en que Hibernate crea y administra "servicios"), mejor apertura de sesiones desde SessionFactory, integración mejorada a través de org.hibernate.integrator.spi.Integrator y detección automática, compatibilidad con internacionalización , códigos de mensajes en el registro y una mayor distinción entre API, SPI o clases de implementación. [6]

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

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

En diciembre de 2013, se lanzó Hibernate ORM 4.3.0 Final. [9] Incluye Java Persistence API 2.1 .

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

En noviembre de 2018 se lanzó Hibernate ORM 5.1.17 Final. Se trata de la versión final de la serie 5.1.

En octubre de 2018, se lanzó Hibernate ORM 5.3 Final, que incluía el almacenamiento en caché de herencia de Java Persistence API 2.2 .

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

En octubre de 2022, se lanzó Hibernate ORM 6.1.4 Final. [11]

Interfaz de programación de aplicaciones

La API de Hibernate se proporciona en el paquete Java org.hibernate . [12]

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 [13] representa una sesión de Hibernate, es decir, el punto principal de la manipulación realizada sobre las entidades de la base de datos. Las últimas actividades incluyen (entre otras cosas) la gestión del estado de persistencia ( transitorio , persistente , separado [ aclaración necesaria ] ) de los objetos, la obtención de los persistentes de la base de datos y la gestión de la demarcación de transacciones [ aclaración necesaria ] .

A Sessionestá pensado para durar tanto como la transacción lógica en la base de datos. Debido a esta última característica, Sessionno se espera que las implementaciones sean seguras para subprocesos ni que sean utilizadas por varios clientes.

Componentes de software

El software Hibernate incluye los siguientes componentes: [14]

  • Hibernate ORM (conocido como Hibernate Core antes de la versión 4.1 [15] ): el software base para una solución de mapeo relacional de objetos para entornos Java [16]
  • Anotaciones de Hibernate (fusionadas en Hibernate Core/ORM desde la versión 3.6 [17] ): 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) [18]
  • Hibernate EntityManager (fusionado en Hibernate Core/ORM desde la versión 5.2 [19] ) – junto con Hibernate Annotations, un contenedor que implementa una solución de persistencia JSR 317 Java Persistence API (JPA 2) [20]
  • Hibernate Envers: auditoría y control de versiones de clases persistentes [21]
  • Hibernate OGM (Object/Grid Mapper): una extensión para almacenar datos en un almacén NoSQL [22]
  • Hibernate Shards: particionamiento horizontal para múltiples bases de datos relacionales [23]
    • 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.
  • Búsqueda de Hibernate: integra la funcionalidad de la biblioteca de texto completo de Apache Lucene en el modelo Hibernate y JPA [24]
  • Herramientas de Hibernate: un conjunto de herramientas implementadas como un conjunto de complementos de Eclipse y tareas Ant incluidas en JBoss Developer Studio [25]
  • Hibernate Validator: la implementación de referencia de la validación de beans JSR 303 [26] [2] : 49–51 
  • Generador de metamodelos Hibernate: un procesador de anotaciones que crea clases de metamodelos estáticos JSR 317 Java Persistence API (JPA 2) utilizando la API de procesamiento de anotaciones conectables JSR 269 [27]
  • NHibernate : una solución de mapeo relacional de objetos para .NET Framework [28]

Véase también

Referencias

  1. ^ "Hibernate Hibernate ORM 6.4.4.Final publicado" . Consultado el 8 de febrero de 2024 .
  2. ^ abcdefghij Bauer, King y Gregory 2015.
  3. ^ "Equals y HashCode". Comunidad JBoss. Archivado desde el original el 2013-12-16 . Consultado el 2013-12-16 .
  4. ^ "Guía del usuario de Hibernate: 2.5.5. Proporcionar atributo de identificador". Comunidad JBoss.
  5. ^ "Hibernate 3.5.0 - Versión final". En relación a...
  6. ^ "Lanzamientos - Hibernate ORM". hibernate.org .
  7. ^ "En relación con... Hibernate ORM 4.1.9.Final Released". Archivado desde el original el 29 de enero de 2013. Consultado el 13 de diciembre de 2012 .
  8. ^ "GC: Hibernate-core-4.2.0.Final.jar - Fuente del proyecto Java de GrepCode". Archivado desde el original el 5 de diciembre de 2014. Consultado el 27 de noviembre de 2014 .
  9. ^ "GC: Hibernate-core-4.3.0.Final.jar - Fuente del proyecto Java de GrepCode". Archivado desde el original el 5 de diciembre de 2014. Consultado el 27 de noviembre de 2014 .
  10. ^ "Lanzamientos - Hibernate ORM". hibernate.org .
  11. ^ Boriero, Andrea. "Hibernate ORM 6.1.4.Final publicado". En relación con . Consultado el 11 de octubre de 2022 .
  12. ^ "Hibernate JavaDocs". docs.jboss.org .
  13. ^ "Sesión (Hibernate JavaDocs)". docs.jboss.org .
  14. ^ "Hibernate: persistencia relacional para Java y .NET". Comunidad JBoss.
  15. ^ "Lanzamiento de Hibernate ORM 4.1.0". Comunidad JBoss.
  16. ^ "HIBERNATE - Persistencia relacional para Java idiomático". Comunidad JBoss.
  17. ^ "No más módulo de anotaciones de hibernación". Comunidad JBoss.
  18. ^ "Anotaciones de Hibernate". Comunidad JBoss.
  19. ^ "hibernate-entitymanager se fusionó con hibernate-core". Comunidad JBoss.
  20. ^ "Hibernate EntityManager". Comunidad JBoss.
  21. ^ "Hibernate Envers: auditoría de entidades sencilla". Comunidad JBoss.
  22. ^ "Hibernate OGM". Comunidad JBoss.
  23. ^ "Fragmentos de hibernación". Comunidad JBoss.
  24. ^ "Búsqueda de Hibernate". Comunidad JBoss.
  25. ^ "Herramientas de Hibernate para Eclipse y Ant". Comunidad JBoss.
  26. ^ "Validador de Hibernate". Comunidad JBoss.
  27. ^ "Generador de metamodelos de Hibernate". Comunidad JBoss.
  28. ^ "NHibernate". Forja NHibernate. Archivado desde el original el 12 de julio de 2012. Consultado el 26 de abril de 2011 .

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-9, archivado desde el 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 edición), Manning Publications , pág. 488, ISBN 978-1-933988-64-1
  • Elliott, James; O'Brien, Tim (22 de abril de 2008), Harnessing Hibernate (Primera edición), O'Reilly Media , pág. 380, ISBN 978-0-596-51772-4
  • Bauer, Christian; King, Gavin; Gregory, Gary (8 de noviembre de 2015). Persistencia de Java con Hibernate . Manning Publications . ISBN 1-61729-045-9.
  • Linwood, Jeff; Minter, Dave (25 de agosto de 2006), Beginning Hibernate: From Novice to Professional (Tercera edición), Apress , pág. 360, ISBN 1-59059-693-5, archivado desde el original el 24 de diciembre de 2010 , consultado el 24 de abril de 2009
  • Minter, Dave; Linwood, Jeff (27 de junio de 2005), Pro Hibernate 3 (Primera edición), Apress , págs. 242, ISBN 1-59059-511-4
  • Iverson, Will (2 de diciembre de 2004), Hibernate: A J2EE Developer's Guide (Primera edición), Addison Wesley , págs. 384, ISBN 0-321-26819-9
  • Pugh, Eric; Gradecki, Joseph D. (8 de octubre de 2004), Professional Hibernate (Programmer to Programmer) (Primera edición), Wrox , pág. 456, ISBN 0-7645-7677-1, archivado desde el 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 , págs. 400, ISBN 1-932394-15-X
  • James, Elliott (10 de mayo de 2004), Hibernate: A Developer's Notebook (Primera edición), O'Reilly Media , págs. 190, ISBN 0-596-00696-9
  • Sitio web oficial
  • Hibernate en GitHub
Obtenido de "https://es.wikipedia.org/w/index.php?title=Hibernate_(marco)&oldid=1239003124"