Content deleted Content added
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation) |
|||
(46 intermediate revisions by 22 users not shown) | |||
Line 1:
{{short description|Object–relational mapping tool}}
{{Infobox software
| name = Hibernate ORM
| logo = Hibernate logo
| logo size = 250px
| developer = [[Red Hat]]
| released = {{Start date and age|2001|05|23|df=yes}}
| latest release version =
| latest release date = {{Start date and age|
| latest preview version =
| latest preview date =
| programming language = [[Java (programming language)|Java]]
| operating system = [[Cross-platform]] ([[JVM]])
| platform = [[Java Virtual Machine]]
| genre = [[
| license = [[
| website = {{
}}
'''Hibernate ORM''' (or simply '''Hibernate''') is an [[
Hibernate is [[free software]] that is distributed under the [[Apache License]]. Versions prior to 7.0.0.Beta4 were distributed under the [[GNU Lesser General Public License]] 2.1.
Hibernate's primary feature is mapping from Java classes to [[Table (database)|database tables]], and mapping from Java data types to [[SQL]] data types. Hibernate also provides data query and retrieval facilities. It generates SQL calls and relieves the developer from the manual handling and object conversion of the result set.
==Standards==
Hibernate ORM is a certified compatible implementation of the industry-standard [[Jakarta Persistence]]<ref>{{Cite web|url=https://jakarta.ee/specifications/persistence/3.2/|title=Jakarta Persistence 3.2|website=jakarta.ee}}</ref> (formerly Java Persistence API) and Jakarta Data<ref>{{Cite web|url=https://jakarta.ee/specifications/data/1.0/|title=Jakarta Data 1.0|website=jakarta.ee}}</ref><ref>{{Cite web|url=https://docs.jboss.org/hibernate/orm/6.6/repositories/html_single/Hibernate_Data_Repositories.html|title= Introducing Hibernate Data Repositories |website=docs.jboss.org}}</ref> specifications.
==Mapping==
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|2015}}{{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|2015}}{{rp|§=5.1.7|pp=89–90}}
* Mapping a single property to multiple columns.
'''Definition:'''
Objects in an [[Object-oriented programming|object-oriented]] application follow [[object-oriented programming|OOP]] principles, while objects in the back-end follow [[database normalization]] principles, resulting in different representation requirements. This problem is called "[[
Mapping informs the ORM tool of what Java class object to store in which database table.
==Hibernate Query Language (HQL)==
Hibernate provides a [[SQL]] inspired language called
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|2015}}{{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|2015}}{{rp|§=3.2.3|pp=39}} though not necessarily '''{{code|public}}'''. Proper behavior in some applications also requires special attention to the {{
Collections of data objects are typically stored in Java collection classes, such as implementations of the {{
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 53 ⟶ 58:
==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|2015}}{{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 62 ⟶ 67:
[[JBoss (company)|JBoss, Inc.]] (now part of [[Red Hat]]) later hired the lead Hibernate developers in order to further its development.
In 2005, Hibernate version 3.0 was released. Key features included a new Interceptor/Callback architecture, user defined filters, and JDK 5.0 [[Java annotation|Annotations]] (Java's [[metadata]] feature). {{As of | 2010}}, Hibernate 3 (version 3.5.0 and up) was a certified implementation of the [[Java Persistence API#JPA 2.0|Java Persistence API 2.0]] specification via a wrapper for the Core module which provides conformity with the JSR 317 standard.<ref>{{cite web|title=Hibernate 3.5.0-Final release|date=April 2010 |url=http://in.relation.to/Bloggers/Hibernate350FinalRelease|publisher=In Relation To...}}</ref>
In Dec 2011, Hibernate Core 4.0.0 Final was released. This includes new features such as [http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#multitenacy multi-tenancy] support, introduction of ServiceRegistry (a major change in how Hibernate builds and manages "services"), better session opening from SessionFactory, improved integration via ''org.hibernate.integrator.spi.Integrator'' and auto discovery, [[Internationalization and localization|internationalization]] support, message codes in logging, and a more distinction between the API, SPI or implementation classes.<ref>{{Cite web|url=http://hibernate.org/orm/releases/|title=Releases - Hibernate ORM|website=hibernate.org}}</ref>
In December 2012, Hibernate ORM 4.1.9 Final was released.<ref>{{Cite web |url=http://in.relation.to/23792.lace |title=
In Mar 2013, Hibernate ORM 4.2 Final was released.<ref>{{Cite web |url=http://grepcode.com/snapshot/repository.jboss.org/nexus/content/repositories/releases/org.hibernate/hibernate-core/4.2.0.Final |title=
In December 2013, Hibernate ORM 4.3.0 Final was released.<ref>{{Cite web |url=http://grepcode.com/snapshot/repository.jboss.org/nexus/content/repositories/releases/org.hibernate/hibernate-core/4.3.0.Final |title=
In September 2015, Hibernate ORM 5.0.2 Final was released. It has improved bootstrapping, hibernate-java8, hibernate-spatial, Karaf support.
Line 79 ⟶ 84:
In December 2018, Hibernate ORM 5.4.0 Final was released.<ref>{{Cite web|url=http://hibernate.org/orm/releases/|title=Releases - Hibernate ORM|website=hibernate.org}}</ref>
In March, 2022, Hibernate ORM 6.0.0 Final was released,<ref>{{Cite web|url=https://in.relation.to/2022/03/31/orm-60-final/|website=hibernate.org|title=Hibernate 6.0 Final|language=en}}</ref> a "major redesign [which] has touched almost every subsystem of Hibernate, including the APIs, mapping annotations, and the query language".<ref>{{Cite web|url=https://docs.jboss.org/hibernate/orm/6.6/introduction/html_single/Hibernate_Introduction.html#preface|title=An Introduction to Hibernate 6|website=docs.jboss.org}}</ref>
In October 2022, Hibernate ORM 6.1.4 Final was released.<ref>{{Cite web |last=Boriero |first=Andrea |title=Hibernate ORM 6.1.4.Final released |url=https://in.relation.to/2022/10/05/hibernate-orm-614-final/ |access-date=2022-10-11 |website=In Relation To |date=5 October 2022 |language=en}}</ref>
In May 2025, Hibernate ORM 7.0.0 Final was released,<ref>{{Cite web|url=https://in.relation.to/2025/05/20/hibernate-orm-seven/|title=Hibernate 7 (and Hibernate Validator 9)|website=In Relation To}}</ref> with support for Jakarta Persistence 3.2 and Jakarta Data 1.0.
==Application programming interface==
The Hibernate API is provided in the [[Java package]] {{code|org.hibernate}}.<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}} interface is the native equivalent version of the JPA's standard {{code|EntityManagerFactory}}.{{sfn|Bauer|King|Gregory|2015}}{{rp|§=2.3|p=26}}
===org.hibernate.Session interface===
The {{code|org.hibernate.Session}} 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
==Software components==
The Hibernate software includes the following components:<ref>{{cite web|title=Hibernate: Relational Persistence for Java and .NET|url=http://www.hibernate.org/|publisher=JBoss Community}}</ref>
* Hibernate ORM (known as Hibernate Core before release 4.1<ref>{{cite web|title=Hibernate ORM 4.1.0 Release|date=9 February 2012 |url=http://in.relation.to/Bloggers/HibernateORM410Release|publisher=JBoss Community}}</ref>) – the base software for an
* Hibernate Annotations (merged into Hibernate Core/ORM since version 3.6<ref>{{cite web|title=No more hibernate-annotations module|date=5 April 2012 |url=http://in.relation.to/Bloggers/NoMoreHibernateannotationsModule|publisher=JBoss Community}}</ref>) – metadata that governs the transformation of data between the object-oriented model and the relational database model according to the JSR 317 [[Java Persistence API]] (JPA 2)<ref>{{cite web|title=Hibernate Annotations|url=http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/|publisher=JBoss Community}}</ref>
* Hibernate EntityManager (merged into Hibernate Core/ORM since version 5.2<ref>{{cite web|title=hibernate-entitymanager merged into hibernate-core|url=https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide---5.2#hibernate-entitymanager-merged-into-hibernate-core|publisher=JBoss Community}}</ref>)– together with Hibernate Annotations, a wrapper that implements a JSR 317 [[Java Persistence API]] (JPA 2) persistence solution<ref>{{cite web|title=Hibernate EntityManager|url=http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html_single/|publisher=JBoss Community}}</ref>
* Hibernate Envers – auditing and versioning of persistent classes<ref>{{cite web|title=Hibernate Envers – Easy Entity Auditing|url=http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/|publisher=JBoss Community}}</ref>
Line 103 ⟶ 115:
* 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|2015}}{{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
==See also==
{{Portal|Free and open-source software|Computer programming}}
* [[List of JBoss software]]
* [[List of
* [[NHibernate]]
* [[Serialization]]
Line 155 ⟶ 167:
}}
*{{citation
|
|
|
|
|
|
|
|
|
|
|
| first1 = Gavin▼
}}
* {{cite book | last1=Bauer | first1=Christian | last2=King | first2=Gavin | last3=Gregory | first3=Gary | title=Java Persistence with Hibernate | publisher=[[Manning Publications]] | date=November 8, 2015 | isbn=978-1-61729-045-9}}
*{{citation
|first1 = Jeff
Line 197:
|url-status = dead
}}
*{{citation
|first1 = Dave |last1 = Minter
|first2 = Jeff
Line 221 ⟶ 222:
}}
*{{citation
|
|
|
|
|
|
|
|
|
|
|
|access-date = April 26, 2009
|archive-date = April 4, 2009
|archive-url = https://web.archive.org/web/20090404004432/http://p2p.wrox.com/book-professional-hibernate-148/
|url-status = dead
}}
*{{citation
|last1 =
|
|last2 =
|date = August 1, 2004
|title = Hibernate In Action
Line 245 ⟶ 251:
|url = https://archive.org/details/hibernateinactio00baue/page/400
}}
*{{citation
|first = Elliott |last = James
|date = May 10, 2004
Line 266 ⟶ 273:
{{Authority control}}
[[Category:
[[Category:Java enterprise platform]]
[[Category:Red Hat software]]
[[Category:Cross-platform software]]▼
[[Category:Persistence frameworks]]
[[Category:Software using the GNU Lesser General Public License]]
▲[[Category:Cross-platform free software]]
|