|Stable release||4.1.9 / December 13, 2012|
|Operating system||Cross-platform (JVM)|
|Platform||Java Virtual Machine|
|License||GNU Lesser General Public License|
Hibernate is an object-relational mapping (ORM) library for the Java language, providing a framework for mapping an object-oriented domain model to a traditional relational database. Hibernate solves object-relational impedance mismatch problems by replacing direct persistence-related database accesses with high-level object handling functions.
Hibernate's primary feature is mapping from Java classes to database tables (and from Java data types to SQL data types). Hibernate also provides data query and retrieval facilities. It also generates the SQL calls and attempts to relieve the developer from manual result set handling and object conversion and keep the application portable to all supported SQL databases with little performance overhead.
Mapping Java classes to database tables is accomplished through the configuration of an XML file or by using Java Annotations. When using an XML file, Hibernate can generate skeletal source code for the persistence classes. This is unnecessary when annotations are used. Hibernate can use the XML file or the annotations to maintain the database schema.
Facilities to arrange one-to-many and many-to-many relationships between classes are provided. In addition to managing associations between objects, Hibernate can also manage reflexive associations where an object has a one-to-many relationship with other instances of its own type.
Hibernate supports the mapping of custom value types. This makes the following scenarios possible:
- Overriding the default SQL type that Hibernate chooses when mapping a column to a property.
- Mapping Java Enum to columns as if they were regular properties.
- Mapping a single property to multiple columns.
Hibernate provides transparent persistence for Plain Old Java Objects (POJOs). The only strict requirement for a persistent class is a no-argument constructor, not necessarily public. Proper behavior in some applications also requires special attention to the equals() and hashCode() methods.
Collections of data objects are typically stored in Java collection objects such as Set and List. Java generics, introduced in Java 5, are supported. Hibernate can be configured to lazy load associated collections. Lazy loading is the default as of Hibernate 3.
Related objects can be configured to cascade operations from one to the other. For example, a parent such as an Album object can be configured to cascade its save and/or delete operation to its child Track objects. This can reduce development time and ensure referential integrity. A dirty checking feature avoids unnecessary database write actions by performing SQL updates only on the modified fields of persistent objects.
Hibernate Query Language (HQL)
Hibernate provides an SQL inspired language called Hibernate Query Language (HQL) which allows SQL-like queries to be written against Hibernate's data objects. Criteria Queries are provided as an object-oriented alternative to HQL.
Hibernate can be used both in standalone Java applications and in Java EE applications using servlets, EJB session beans, and JBI service components. It can also be included as a feature in other programming languages. For example, Adobe integrated Hibernate into version 9 of ColdFusion (which runs on J2EE app servers) with an abstraction layer of new functions and syntax added into CFML.
Entities and components
In Hibernate jargon, an entity is a stand-alone object in Hibernate's persistent mechanism which can be manipulated independently of other objects. In contrast, a component is subordinate to other entities and can be manipulated only with respect to other entities. 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, it can switch databases.
Hibernate was started in 2001 by Gavin King as an alternative to using EJB2-style entity beans. Its mission back then was to simply offer better persistence capabilities than offered by EJB2 by simplifying the complexities and allowing for missing features.
Early in 2003, the Hibernate development team began Hibernate2 releases which offered many significant improvements over the first release.
In 2005, Hibernate version 3.0 was released with features like: a new Interceptor/Callback architecture, user defined filters, and JDK 5.0 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 2.0 specification via a wrapper for the Core module which provides conformity with the JSR 317 standard.
In Dec 2011, Hibernate Core 4.0.0 Final was released. This includes new features like: Initial multi-tenancy support, Introduction of ServiceRegistry (which is a major change in how Hibernate builds and manages "services"), Clean up of Session opening from SessionFactory, Improved integration via org.hibernate.integrator.spi.Integrator and auto discovery, cfjcImproved logging with i18n support and message codes, Initial work on more clear split between API, SPI and implementation classes, Clean up of deprecated methods, classes, etc.
In Dec 2012, Hibernate ORM 4.1.9 Final was released.
In 2012, Hibernate 5 started development. It will contain JPA 2.1 support.
Application programming interface
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, persisted, detached[clarification needed]) of the objects, fetching the persisted ones from the database and the management of the transaction demarcation[clarification needed].
A session is intended to last as long as the logical transaction on the database. Due to the latter feature, Session implementations are not expected to be threadsafe nor to be used by multiple clients.
The Hibernate software includes the following components:
- Hibernate ORM (was known as Hibernate Core before release 4.1) – the base software for an object-relational mapping solution for Java environments
- Hibernate Annotations (merged into Hibernate Core/ORM since version 3.6) – 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)
- Hibernate EntityManager – together with Hibernate Annotations, a wrapper that implements a JSR 317 Java Persistence API (JPA 2) persistence solution on top of Hibernate Core
- Hibernate Envers – auditing and versioning of persistent classes
- Hibernate OGM – Object/Grid Mapper is an extension to store data in a NoSQL store
- Hibernate Shards – horizontal partitioning for multiple relational databases
- NOTE: Hibernate Shards is not compatible with the 4.x versions of Hibernate Core... some of the Shards capability was integrated into Core in the 4.0 release.
- Hibernate Search – integrates the full text library functionality from Apache Lucene in the Hibernate and JPA model
- Hibernate Tools – a set of tools implemented as a suite of Eclipse plugins and Ant tasks included in JBoss Developer Studio
- Hibernate Validator – the reference implementation of JSR 303 Bean Validation
- Hibernate Metamodel Generator – an annotation processor that creates JSR 317 Java Persistence API (JPA 2) static metamodel classes using the JSR 269 Pluggable Annotation Processing API
- NHibernate – an object-relational mapping solution for the .NET Framework
- List of JBoss software
- EJB 3.0
- Service Data Object
- QuickDB ORM
- List of object-relational mapping software
- "Equals and HashCode". JBoss Community.
- "Hibernate 3.5.0-Final release". In Relation To...
- "Hibernate: Relational Persistence for Java and .NET". JBoss Community.
- "Hibernate ORM 4.1.0 Release". JBoss Community.
- "HIBERNATE - Relational Persistence for Idiomatic Java". JBoss Community.
- "No more hibernate-annotations module". JBoss Community.
- "Hibernate Annotations". JBoss Community.
- "Hibernate EntityManager". JBoss Community.
- "Hibernate Envers – Easy Entity Auditing". JBoss Community.
- "Hibernate OGM". JBoss Community.
- "Hibernate Shards". JBoss Community.
- "Hibernate Search". JBoss Community.
- "Hibernate Tools for Eclipse and Ant". JBoss Community.
- "Hibernate Validator". JBoss Community.
- "Hibernate Metamodel Generator". JBoss Community.
- "NHibernate". NHibernate Forge.
- Linwood, Jeff; Minter, Dave (May 28, 2010), Beginning Hibernate (Second ed.), Apress, p. 400, ISBN 1-4302-2850-4
- Bernard, Emmanuel; Griffin, John (December 30, 2008), Hibernate Search in Action (First ed.), Manning Publications, p. 488, ISBN 1-933988-64-9
- Elliott, James; O'Brien, Tim (April 22, 2008), Harnessing Hibernate (First ed.), O'Reilly Media, p. 380, ISBN 0-596-51772-6
- King, Gavin; Christian, Bauer (November 24, 2006), Java Persistence with Hibernate (Second ed.), Manning Publications, p. 880, ISBN 1-932394-88-5
- Linwood, Jeff; Minter, Dave (August 25, 2006), Beginning Hibernate: From Novice to Professional (Third ed.), Apress, p. 360, ISBN 1-59059-693-5
- Minter, Dave; Linwood, Jeff (June 27, 2005), Pro Hibernate 3 (First ed.), Apress, p. 242, ISBN 1-59059-511-4
- Iverson, Will (December 2, 2004), Hibernate: A J2EE Developer's Guide (First ed.), Addison Wesley, p. 384, ISBN 0-321-26819-9
- Pugh, Eric; Gradecki, Joseph D. (October 8, 2004), Professional Hibernate (Programmer to Programmer) (First ed.), Wrox, p. 456, ISBN 0-7645-7677-1
- King, Gavin; Christian, Bauer (August 1, 2004), Hibernate In Action (Second ed.), Manning Publications, p. 400, ISBN 1-932394-15-X
- James, Elliott (May 10, 2004), Hibernate: A Developer's Notebook (First ed.), O'Reilly Media, p. 190, ISBN 0-596-00696-9
- Official website
- Hibernate for Dummies in Spanish
- Interview with Gavin King, founder of Hibernate
- Hibernate Reference Documentation
- Hibernate and HQL Query Tutorial
- scale4j is highly scalable domain oriented data-distributed platform for java built on top of hibernate
- Hibernate Tutorial
- TorpedoQuery - Type safe Hibernate query builder
- Hibernate Tutorial
- Hibernate Annotations Tutorial
- Java Persistence (JPA 2.0) Tutorial With Hibernate