Hibernate ORM (o simplemente Hibernate ) es una herramienta de mapeo relacional de objetos 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 discrepancia de impedancia relacional entre objetos reemplazando los accesos directos y persistentes a la base de datos con funciones de manejo de objetos de alto nivel.
Desarrollador (es) | sombrero rojo |
---|---|
Versión inicial | 23 de mayo de 2001 |
Lanzamiento estable | 5.4.31.Final / 30 de abril de 2021 [1] |
Versión de vista previa | 6.0.0.Alpha6 / 20 de agosto de 2020 [2] |
Repositorio | |
Escrito en | Java |
Sistema operativo | Multiplataforma ( JVM ) |
Plataforma | máquina virtual de Java |
Tipo | Mapeo relacional de objetos |
Licencia | Licencia pública general reducida GNU |
Sitio web | hibernar |
Hibernate es un software gratuito que se distribuye bajo la GNU Lesser General Public License 2.1.
La característica principal de Hibernate es el mapeo de las clases de Java a las tablas de la base de datos y el mapeo de los tipos de datos de Java a los tipos de datos de SQL . Hibernate también proporciona funciones de 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.
Cartografía
La asignación de clases de Java a tablas de base de datos se implementa mediante la configuración de un archivo XML o mediante anotaciones de Java . Cuando se usa un archivo XML, Hibernate puede generar un código fuente esqueleto para las clases de persistencia. Esto es auxiliar cuando se utilizan anotaciones. Hibernate puede usar el archivo XML o las anotaciones de 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. Además de administrar asociaciones entre objetos, Hibernate también puede administrar asociaciones reflexivas en las que un objeto tiene una relación de uno a muchos con otras instancias del tipo de clase .
Hibernate admite el mapeo de tipos de valores personalizados. Esto hace posibles los siguientes escenarios:
- Reemplazo del tipo de SQL predeterminado al asignar una columna a una propiedad.
- Mapeo de Java Enums a columnas como si fueran propiedades regulares.
- Asignación de una sola propiedad a varias columnas.
Definición: los objetos en una aplicación orientada a objetos siguen los principios de programación orientada a objetos , mientras que los objetos del back-end siguen los principios de normalización de la base de datos , lo que genera diferentes requisitos de representación. Este problema se denomina " desajuste de impedancia relacional de objeto ". El mapeo es una forma de resolver el problema de desajuste de impedancia relacional de objeto.
El mapeo informa a la herramienta ORM de qué objeto de clase Java almacenar en qué tabla de base de datos.
Lenguaje de consulta 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. Las consultas de criterios se proporcionan como una alternativa orientada a objetos a HQL. La consulta de criterios se utiliza para modificar los objetos y proporcionar la restricción para los objetos. HQL (Hibernate Query Language) es la versión orientada a objetos de SQL. Genera consultas independientes de la base de datos para que no sea necesario escribir consultas específicas de la base de datos. Sin esta capacidad, cambiar la base de datos también requeriría que se modifiquen las consultas SQL individuales, lo que generaría problemas de mantenimiento.
Persistencia
Hibernate proporciona persistencia transparente para Objetos Java antiguos simples (POJO). El único requisito estricto para una clase persistente es un constructor sin argumentos , aunque no necesariamente public
. El comportamiento adecuado en algunas aplicaciones también requiere especial atención a los métodos equals()
y hashCode()
en las clases de objeto. [3] Hibernate recomienda proporcionar un atributo de identificador, y está previsto que sea un requisito obligatorio en una versión futura. [4]
Las colecciones de objetos de datos se almacenan normalmente en clases de colección Java, como implementaciones de las interfaces Set
y List
. Los genéricos de Java , introducidos en Java 5, también son compatibles. Hibernate se puede configurar para cargar colecciones asociadas de forma diferida . La carga diferida es la 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 Album
objeto de clase padre se puede configurar para que en cascada sus operaciones save
y delete
a sus Track
objetos de clase hijo .
Integración
Hibernate se puede utilizar tanto en aplicaciones Java independientes como en aplicaciones Java EE utilizando servlets , beans de sesión EJB y componentes de servicio JBI . También se puede incluir como 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 a CFML .
Entidades y componentes
En la jerga de Hibernate , una entidad es un objeto independiente en el mecanismo persistente de Hibernate que puede manipularse independientemente de otros objetos. Por el contrario, 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 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 iniciado en 2001 por Gavin King con colegas de Cirrus Technologies como una alternativa al uso de beans de entidad al estilo EJB2. El objetivo original era ofrecer mejores capacidades de persistencia que las ofrecidas por EJB2; simplificando las complejidades y complementando ciertas características faltantes.
A principios de 2003, el equipo de desarrollo de Hibernate comenzó las versiones de Hibernate2, que ofrecieron muchas mejoras significativas con respecto a la primera versión.
JBoss, Inc. (ahora parte de Red Hat ) luego contrató a los desarrolladores líderes de Hibernate para promover su desarrollo.
En 2005, se lanzó la versión 3.0 de Hibernate. Las características clave incluyen una nueva arquitectura de interceptor / devolución de llamada, filtros definidos por el usuario y anotaciones JDK 5.0 ( función de metadatos de Java ). A partir de 2010[actualizar], Hibernate 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 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. Esto incluye nuevas características como soporte multi-tenancy , introducción de ServiceRegistry (un cambio importante en cómo Hibernate construye y administra "servicios"), mejor apertura de sesión desde SessionFactory, integración mejorada a través de org.hibernate.integrator.spi.Integrator y auto descubrimiento , soporte de 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] Cuenta con la API 2.1 de persistencia de Java .
En septiembre de 2015, se lanzó Hibernate ORM 5.0.2 Final. Tiene soporte mejorado para bootstrapping, hibernate-java8, hibernate-espacial, Karaf.
En noviembre de 2018, se lanzó Hibernate ORM 5.1.17 Final. Esta es la versión final de la serie 5.1.
En octubre de 2018, se lanzó Hibernate ORM 5.3 Final. Presentaba almacenamiento en caché de herencia Java Persistence API 2.2 .
En diciembre de 2018, se lanzó Hibernate ORM 5.4.0 Final. [10]
Interfaz de programación de aplicaciones
La API de Hibernate se proporciona en el paquete de Java org.hibernate. [11]
Interfaz org.hibernate.SessionFactory
org.hibernate.Session interfaz
La interfaz org.hibernate.Session [12] representa una sesión de Hibernate, es decir, el punto principal de la manipulación realizada en las entidades de la base de datos. Las últimas actividades incluyen (entre otras cosas) gestionar el estado de persistencia ( transitorio , persistente , separado [ aclaración necesaria ] ) de los objetos, recuperar los persistentes de la base de datos y gestionar la demarcación de la transacción [ aclaración necesaria ] .
Se pretende que una sesión dure tanto como la transacción lógica en la base de datos. Debido a esta última característica, no se espera que las implementaciones de sesión sean seguras para subprocesos ni que sean utilizadas por varios clientes.
Componentes de software
El software Hibernate incluye los siguientes componentes: [13]
- Hibernate ORM (conocido como Hibernate Core antes de la versión 4.1 [14] ): el software base para una solución de mapeo relacional de objetos para entornos Java [15]
- Anotaciones de Hibernate (fusionadas en Hibernate Core / ORM desde la versión 3.6 [16] ): metadatos que gobiernan la transformación de datos entre el modelo orientado a objetos y el modelo de base de datos relacional de acuerdo con JSR 317 Java Persistence API (JPA 2) [17]
- Hibernate EntityManager (fusionado en Hibernate Core / ORM desde la versión 5.2 [18] ) - junto con Hibernate Annotations, un contenedor que implementa una solución de persistencia JSR 317 Java Persistence API (JPA 2) [19]
- Hibernate Envers: auditoría y control de versiones de clases persistentes [20]
- Hibernate OGM (Object / Grid Mapper): una extensión para almacenar datos en una tienda NoSQL [21]
- Fragmentos de Hibernate: particionamiento horizontal para múltiples bases de datos relacionales [22]
- 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 [23]
- Hibernate Tools: un conjunto de herramientas implementadas como un conjunto de complementos de Eclipse y tareas Ant incluidas en JBoss Developer Studio [24]
- Hibernate Validator: la implementación de referencia de JSR 303 Bean Validation [25]
- Hibernate Metamodel Generator - un procesador de anotación que crea JSR 317 Java API Persistence (JPA 2) clases metamodelo estáticos utilizando el JSR 269 API enchufable Procesamiento de anotación [26]
- NHibernate : una solución de mapeo relacional de objetos para .NET Framework [27]
Ver también
- Lista de software JBoss
- Lista de software de mapeo relacional de objetos
- NHibernate
- Publicación por entregas
- Objeto de datos de servicio
- MySQL
- Apache Cassandra
- Marco de primavera
- MyBatis
Referencias
- ^ "Hibernate ORM 5.4.31.Final lanzado" . Consultado el 30 de abril de 2021 .
- ^ "Hibernate ORM 6.0.0.Alpha6 lanzado" . Consultado el 21 de enero de 2021 .
- ^ "Equals y HashCode" . Comunidad JBoss.
- ^ "Guía del usuario de Hibernate: 2.5.5. Proporcionar atributo de identificador" . Comunidad JBoss.
- ^ "Versión final de Hibernate 3.5.0" . En relación a...
- ^ "Lanzamientos - Hibernate ORM" . hibernate.org .
- ^ "Copia archivada" . Archivado desde el original el 29 de enero de 2013 . Consultado el 13 de diciembre de 2012 .Mantenimiento de CS1: copia archivada como título ( enlace )
- ^ "Copia archivada" . Archivado desde el original el 5 de diciembre de 2014 . Consultado el 27 de noviembre de 2014 .Mantenimiento de CS1: copia archivada como título ( enlace )
- ^ "Copia archivada" . Archivado desde el original el 5 de diciembre de 2014 . Consultado el 27 de noviembre de 2014 .Mantenimiento de CS1: copia archivada como título ( enlace )
- ^ "Lanzamientos - Hibernate ORM" . hibernate.org .
- ^ "Hibernar JavaDocs" . docs.jboss.org .
- ^ "Sesión (Hibernate JavaDocs)" . docs.jboss.org .
- ^ "Hibernate: Persistencia relacional para Java y .NET" . Comunidad JBoss.
- ^ "Versión de Hibernate ORM 4.1.0" . Comunidad JBoss.
- ^ "HIBERNATE - Persistencia relacional para Java idiomático" . Comunidad JBoss.
- ^ "No más módulo de anotaciones de hibernación" . Comunidad JBoss.
- ^ "Anotaciones de Hibernación" . Comunidad JBoss.
- ^ "hibernate-entitymanager fusionado en hibernate-core" . Comunidad JBoss.
- ^ "Hibernate EntityManager" . Comunidad JBoss.
- ^ "Hibernate Envers - Auditoría de entidades fácil" . Comunidad JBoss.
- ^ "Hibernar OGM" . Comunidad JBoss.
- ^ "Fragmentos de hibernación" . Comunidad JBoss.
- ^ "Búsqueda de hibernación" . Comunidad JBoss.
- ^ "Herramientas de hibernación para Eclipse y Ant" . Comunidad JBoss.
- ^ "Validador de hibernación" . Comunidad JBoss.
- ^ "Hibernate Metamodel Generator" . Comunidad JBoss.
- ^ "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 ed.), Apress , p. 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 ed.), Manning Publications , p. 488, ISBN 978-1-933988-64-1
- Elliott, James; O'Brien, Tim (22 de abril de 2008), Harnessing Hibernate (Primera ed.), O'Reilly Media , p. 380, ISBN 978-0-596-51772-4
- Rey, Gavin; Christian, Bauer (24 de noviembre de 2006), Java Persistence with Hibernate (Segunda ed.), Manning Publications , p. 880, ISBN 1-932394-88-5
- Linwood, Jeff; Minter, Dave (25 de agosto de 2006), Beginning Hibernate: From Novice to Professional (Tercera ed.), Apress , p. 360, ISBN 1-59059-693-5, archivado desde el 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 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 (de programador a programador) (Primera edición), Wrox , p. 456, ISBN 0-7645-7677-1
- Rey, Gavin; Christian, Bauer (1 de agosto de 2004), Hibernate In Action (segunda ed.), 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
enlaces externos
- Página web oficial
- Hibernar en GitHub