Hibernate (framework): Difference between revisions

Content deleted Content added
Persistence: Add link to JavaDoc and code formatting
Fix sfn issues.
Line 18:
}}
 
'''Hibernate ORM''' (or simply '''Hibernate''') is an [[object–relational mapping]]{{sfn|Bauer|King|Gregory|20162015}}{{rp|§1.2.2|p=12}} tool for the [[Java (programming language)|Java]] programming language. It provides a [[Software framework|framework]] for mapping an [[Object-oriented programming|object-oriented]] ___domain model to a [[relational database]]. Hibernate handles [[object–relational impedance mismatch]] problems by replacing direct, [[Persistence (computer science)|persistent]] database accesses with high-level object handling functions.
 
Hibernate is [[free software]] that is distributed under the [[GNU Lesser General Public License]] 2.1.
Line 27:
The mapping of Java classes to database tables is implemented by the configuration of an [[XML]] file or by using [[Java annotation|Java Annotations]]. When using an XML file, Hibernate can [[Program synthesis|generate]] skeleton [[source code]] for the persistence classes. This is auxiliary when annotations are used. Hibernate can use the XML file or the Java annotations to maintain the [[database schema]].
 
There are provided facilities to arrange [[One-to-many (data model)|one-to-many]] and [[Many-to-many (data model)|many-to-many]] relationships between classes.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=7|pp=140-171}} In addition to managing associations between objects, Hibernate can also manage [[Reflexive relation|reflexive]] associations wherein an object has a one-to-many relationship with other instances of the [[Class (computer programming)|class]] [[data type|type]].
 
Hibernate supports the mapping of custom value types. This makes the following scenarios possible:
* Overriding the default SQL type when mapping a column to a property.
* Mapping Java [[Enumerated type|Enums]] to columns as though they were regular properties.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=5.1.7|pp=89-90}}
* Mapping a single property to multiple columns.
 
Line 40:
 
==Hibernate Query Language (HQL)==
Hibernate provides a [[SQL]] inspired language called Hibernate Query Language (HQL) for writing SQL-like queries against Hibernate's data objects. ''Criteria Queries'' are provided as an [[Object-oriented programming|object-oriented]] alternative to HQL. Criteria Query is used to modify the objects and provide the restriction for the objects.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=14.1.1|p=347-349}}
HQL (Hibernate Query Language) is the object-oriented version of SQL. It generates database independent queries so that there is no need to write database-specific queries. Without this capability, changing the database would require individual SQL queries to be changed as well, leading to maintenance issues.
 
==Persistence==
Hibernate provides transparent persistence for [[Plain Old Java Object]]s (POJOs).{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=3.2.2|pp=37-38}} The only strict requirement for a persistent class is a [[Nullary constructor|no-argument constructor]],{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=3.2.3|pp=39}} though not necessarily '''{{code|public}}'''. Proper behavior in some applications also requires special attention to the {{Javadoc|module=java.base|package=java.lang|class=Object|member=equals(java.lang.Object)|text=equals(Object obj)|monotype=y}} and {{Javadoc|module=java.base|package=java.lang|class=Object|member=hashCode()|text=hashCode()|monotype=y}} methods in the <{{code>|Object</code>}} classes.<ref>{{cite web|title=Equals and HashCode|url=https://community.jboss.org/wiki/EqualsAndHashCode|publisher=JBoss Community}}</ref> Hibernate recommends providing an identifier attribute, and this is planned to be a mandatory requirement in a future release.<ref>{{cite web|title=Hibernate User Guide: 2.5.5. Provide identifier attribute|url=http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-pojo-identifier|publisher=JBoss Community}}</ref>
 
Collections of data objects are typically stored in Java collection classes, such as implementations of the {{Javadoc|module=java.base|package=java.util|class=Set|text=Set|monotype=y}} and {{Javadoc|module=java.base|package=java.util|class=List|text=List|monotype=y}} interfaces. [[Generics in Java|Java generics]], introduced in Java 5, are also supported. Hibernate can be configured to [[lazy load]] associated collections.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=12.1|pp=289-293}} Lazy loading is the default as of Hibernate 3.
 
Related objects can be configured to ''[[Propagation constraint|cascade]]'' operations from one object to the other. For example, a parent {{code|Album}} class object can be configured to cascade its {{code|save}} and {{code|delete}} operations to its child {{code|Track}} class objects.
Line 54:
 
==Entities and components==
In Hibernate [[jargon]], an ''entity'' is a stand-alone object in Hibernate's [[Persistence (computer science)|persistent]] mechanism which can be manipulated independently of other objects.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=4.2|pp=62-74}} In contrast, a ''component'' is subordinate to an entity and can be manipulated only with respect to that entity. For example, an Album object may represent an entity; but the Tracks object associated with the Album objects would represent a ''component'' of the Album entity, if it is assumed that Tracks can only be saved or retrieved from the database through the Album object. Unlike J2EE, Hibernate can switch databases.
 
==History==
Line 85:
==Application programming interface==
 
The Hibernate API is provided in the [[Java package]] <{{code>|org.hibernate</code>}}.<ref>{{Cite web|url=https://docs.jboss.org/hibernate/stable/core/javadocs/index.html?overview-summary.html|title=Hibernate JavaDocs|website=docs.jboss.org}}</ref>
 
===org.hibernate.SessionFactory interface===
The <{{code>|org.hibernate.SessionFactory</code>}} interface is the native equivalent version of the JPA's standard <{{code>|EntityManagerFactory</code>}}.{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=2.3|p=26}}
 
===org.hibernate.Session interface===
 
The <{{code>|org.hibernate.Session</code>}} interface<ref>{{Cite web|url=https://docs.jboss.org/hibernate/stable/core/javadocs/org/hibernate/Session.html|title=Session (Hibernate JavaDocs)|website=docs.jboss.org}}</ref> represents a Hibernate session, i.e., the main point of the manipulation performed on the database entities. The latter activities include (among the other things) managing the persistence state ([[Transient (computer programming)|transient]], [[Java Persistence API|persisted]], detached{{Clarify|date=June 2011}}) of the objects, fetching the persisted ones from the database and the management of the transaction demarcation{{Clarify|date=June 2011}}.
 
A <{{code>|Session</code>}} is intended to last as long as the logical transaction on the database. Due to the latter feature, <{{code>|Session</code>}} implementations are not expected to be thread safe nor to be used by multiple clients.
 
==Software components==
Line 107:
* Hibernate Search – integrates the full text library functionality from [[Apache Lucene]] in the Hibernate and JPA model<ref>{{cite web|title=Hibernate Search|url=http://www.hibernate.org/search/|publisher=JBoss Community}}</ref>
* Hibernate Tools – a set of tools implemented as a suite of [[Eclipse (software)|Eclipse]] plugins and [[Ant (software)|Ant]] tasks included in [[JBoss Developer Studio]]<ref>{{cite web|title=Hibernate Tools for Eclipse and Ant|url=http://www.hibernate.org/tools/|publisher=JBoss Community}}</ref>
* Hibernate Validator – the [[reference implementation]] of JSR 303 [[Bean Validation]]<ref>{{cite web|title=Hibernate Validator|url=http://www.hibernate.org/validator/|publisher=JBoss Community}}</ref>{{sfn|Bauer|King|Gregory|20162015}}{{rp|§=3.3.2|pp=49-51}}
* Hibernate Metamodel Generator – an annotation processor that creates JSR 317 [[Java Persistence API]] (JPA 2) static metamodel classes using the JSR 269 [[Metadata facility for Java|Pluggable Annotation Processing API]]<ref>{{cite web|title=Hibernate Metamodel Generator|url=http://www.hibernate.org/subprojects/jpamodelgen.html|publisher=JBoss Community}}</ref>
* [[NHibernate]] – an object–relational mapping solution for the [[.NET Framework]]<ref>{{cite web|title=NHibernate|url=http://nhforge.org/|publisher=NHibernate Forge|access-date=2011-04-26|archive-url=https://archive.today/20120712170138/http://nhforge.org/|archive-date=2012-07-12|url-status=dead}}</ref>
Line 171:
|url = http://oreilly.com/catalog/9780596517724/
}}
* {{cite book | last=Bauer | first=Christian | last2=King | first2=Gavin | last3=Gregory | first3=Gary | title=Java Persistence with Hibernate | publisher=[[Manning Publications]] | date=November 8, 2015 | isbn=1-61729-045-9}}
*{{citation
|last1 = Bauer
|first1 = Christian
|last2 = King
|first2 = Gavin
|last3 = Gregory
|first3 = Gary
| year = 2016
| title = Java Persistence with Hibernate
| edition = Second
| publisher = [[Manning Publications]]
| pages = 880
| isbn = 978-1617290459
| url =
}}
*{{citation
|first1 = Jeff