# Hibernate

Hibernate és una solució implementada pel mapeig objecte - relacional (ORM) per aplicacions Java, sobre una base de dades relacional. Els seus propòsits bàsics són els d'alliberar el programador d'un seguit de tasques pròpies de la persistència de dades relacionals i dotar les aplicacions de portabilitat entre SGBDs diferents.
Hibernate és lliure, de codi obert i està distribuït sota la GNU Lesser General Public License

## Funcionalitats

La funcionalitat bàsica d'Hibernate és la del mapeig de classes Java en taules de Base de Dades i tipus de dades Java sobre tipus de dades d'SQL. Hibernate també proveeix un llenguatge de consulta (Hibernate Query Language, HQL) i facilitats per la recuperació de dades. Hibernate genera les crides SQL i deixa al desenvolupador la gestió manual del resultat de la consulta i la conversió a objectes. Gràcies a això una aplicació pot ser portable a la majoria de bases de dades SQL, amb mínima càrrega addicional. El requeriment necessari perquè una aplicació basada en Hibernate pugui usar una base dades SQL és que existeixi el controlador de software (driver) encarregat de la traducció d'HQL al dialecte SQL del SGBD sobre el qual ha de córrer l'aplicació.
Hibernate pot ser usat tant en aplicacions standalone com en aplicacions Java EE que usen servlets o EJB session beans.

## Mapeig

En la programació orientada a objectes l'accés a la base de dades se'n surt del paradigma. Haver d'integrar accessos SQL a la base de dades és farragós i fa el codi complicat de mantenir. El mapeig d'objectes relacional treu del codi i automatitza aquesta tasca. A base de programació declarativa que pot ser feta amb XDoclet, XML o anotacions de Java el programador especifica de quina taula surt cada objecte i de quin camp de la taula surt cada atribut de l'objecte.

## Hibernate Query Language (HQL)

Per poder fer accessos filtrats de múltiples objectes cal fer queries. Amb l'objectiu que aquestes queries no depenguin d'un producte propietari, Hibernate ofereix HQL. Igual com es fa amb el mapeig, HQL tradueix les queries en el seu propi llenguatge al llenguatge SQL de la base de dades especificada.
Alternativament, Hibernate també ofereix les Criteria Queries, que és una forma d'especificar queries amb els patrons de la programació orientada a objectes, mantenint així l'harmonia dintre del codi.

## Persistència

Hibernate proveeix persistència per "Plain Old Java Objects"; l'únic requeriment estricte per una classe persistent és el d'oferir un constructor públic i sense arguments.
Els canvis poden ser fetes a un objecte individual o en cascada, és a dir, si l'objecte apunta d'altres objectes que també són afectats per la modificació, podem especificar que el fet de gravar-lo també implicar gravar els altres. Això també serveix per l'eliminació.

## Història

Hibernate va ser desenvolupat l'any 2001 per un equip de programadors Java d'arreu del món, liderats per Gavin King. En aquell moment existia EJB2, que era considerat molt farragós i ell va voler crear-ne una alternativa més lleugera i complerta.
L'any 2003 van aparèixer les edicions de Hibernate 2, més potent que les anteriors.
JBoss Inc. (posteriorment adquirit per Red Hat) va contractar més tard el nucli de l'equip de desenvolupadors i van treballar-hi donant suport a Hibernate.
El 2004 va sortir la versió 3.0 de Hibernate. Aquesta versió té característiques noves, com ara una nova arquitectura d'Interceptor/Callback, filtres definits per l'usuari i JDK 5.0 Annotations (funcionalitat de metadades de Java). Hibernate 3 també és molt proper a l'especificació d'EJB 3.0 i serveix com la columna vertebral de la implementació d'EJB 3.0 sobre JBoss.
* La primera versió descarregable va ser la 0.8 alpha, apareguda el 30 de novembre de 2001
* La versió 1.0 final va aparèixer el 2 de juliol de 2002
** La darrera versió 1.X va ser la 1.2.5, apareguda el 9 de maig de 2003
* La versió 2.0 final va aparèixer el 7 de juny del 2003
** La darrera 2.X va ser la 2.1.8, apareguda el 30 de gener del 2005
* La versió 3.0 final va aparèixer el 31 de març del 2005
** La versió 3.2.4 va aparèixer el 9 de maig del 2007
** La versió 3.2.5 va aparèixer el 31 de juliol del 2007
** La versió 3.2.6 va aparèixer el 8 de febrer del 2008
El 2010 Hibernate 3.5 va ser certificat com una implementació de la JPA gràcies a un embolcall per al mòdul principal que proveeix conformitat amb els estàndards de la JSR 137.
La versió en començar el 2011 era la 3.x. Aquesta versió va introduir noves funcionalitats com una nova arquitectura d'Interceptor/Callback, filtres definitis per l'usuari i anotacions JDK 5.0 (funcionalitat de metadades de Java). Hibernate 3 (a partir de la versió 3.5.0) és una implementació certificada de la Java Persistence API 2.0 specification via un embolcall pel mòdul Core que aporta conformitat amb l'estàndard JSR 317.
Al desembre del 2011 va sortir l'edició Hibernate ORM 4.0.0 Final.
Al febrer del 2012 va sortir l'edició Hibernate ORM 4.1.0 Final.
Al març del 2013, la Hibernate ORM 4.2.0 Final.
Al desembre del 2013, la Hibernate ORM 4.3.0 Final;
A l'agost del 2015, la Hibernate ORM 5.0.0 Final.
Al setembre del 2015, la Hibernate ORM 5.1.0 Final.
Al novembre del 2016, la Hibernate ORM 5.2.0 Final.
A l'octubre del 2018, la Hibernate ORM 5.3.0 Final.
Al desembre del 2018, la Hibernate ORM 5.4.0 Final.
Al juny del 2021, la Hibernate ORM 5.5.0 Final.
A l'octubre del 2021, la Hibernate ORM 5.6.0 Final.
Al març del 2022, la Hibernate ORM 6.0.0 Final.
Al juny del 2022, la Hibernate ORM 6.1.0 Final.

## Hibernate i JDO

En el moment del seu desenvolupament l'especificació JDO de mapeig i gestió de persistència gaudia de molt bona reputació, però no existien implementacions consolidades al mercat. Hibernate va començar tard però ràpidament va rebre una gran acollida, desplaçant JDO de moltes empreses.
Gràcies a la ràpida expansió del seu ús, aquesta única implementació (JDO era només una especificació, Hibernate una eina desenvolupada) i la gran quantitat de desenvolupadors amb formació avançada en l'eina i documentació existent a Hibernate, són un complement molt potent al seu robust funcionament.

## Hibernate i JPA

Posteriorment a l'aparició d'Hibernate, es va crear l'estàndard JPA, més focalitzat a programació orientada a objectes que JDO. Inicialment era una part de les Jakarta Enterprise Beans 3.0, però va acabar agafant entitat pròpia i sent integrada al paquet javax.persistence de Java. Finalment Hibernate es va adaptar i va fer l'esforç de convertir-se en implementació de JPA.

## Altres implementacions

Paral·lelament a Hibernate, existeix NHibernate, desenvolupat per la mateixa companyia, per ser usat sobre plataformes .NET

## Vegeu també

* EJB 3.0
* NHibernate
* Spring Framework
* Serialització

## Referències

* ↑ «Hibernate ORM 4.2 series» (en anglès), 18-03-2013. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 4.3 series» (en anglès), 16-12-2013. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.0 series» (en anglès), 10-02-2016. [Consulta: 9 gener 2022].
* ↑ «Hibernate ORM 5.1 series» (en anglès), 20-10-2016. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.2 series» (en anglès), 01-06-2016. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.3 Series» (en anglès), 14-05-2018. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.4 series» (en anglès), 12-12-2018. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.5 series» (en anglès), 15-10-2021. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 5.6 5.6.0.Final» (en anglès), 13-10-2021. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 6.0 series» (en anglès), 31-03-2022. [Consulta: 9 octubre 2022].
* ↑ «Hibernate ORM 6.1 series» (en anglès), 07-06-2022. [Consulta: 9 octubre 2022].

## Bibliografia

* Christian Bauer, Gavin King: Java Persistence with Hibernate, Manning Publications Company, ISBN 1-932394-88-5
* Christian Bauer, Gavin King: Hibernate In Action, Manning Publications Company, ISBN 1-932394-15-X
* Will Iverson: Hibernate: A J2EE™ Developer's Guide, Addison Wesley Professional, ISBN 0-321-26819-9
* James Elliott: Hibernate: A Developer's Notebook, O'Reilly, ISBN 0-596-00696-9

## Enllaços externs

* Pàgina principal d'Hibernate
* Pàgina d'Hibernate a Sourceforge
* Llista de bases de dades suportades per Hibernate
Viccionari