Hibernate (Java)
![]() |
|
---|---|
Developer(s) | Red Hat |
Stable release | 3.3.2 GA / June 24, 2009 |
Preview release | 3.5.0-Beta-4 / January 29, 2010 |
Written in | Java |
Operating system | Cross-platform (JVM) |
Platform | Java Virtual Machine |
Type | Object-relational mapping |
License | GNU Lesser General Public License |
Website | http://www.hibernate.org |
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 is free as open source software that is distributed under the GNU Lesser General Public License.
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. Hibernate generates the SQL calls and relieves the developer from manual result set handling and object conversion, keeping the application portable to all supported SQL databases, with database portability delivered at very little performance overhead.[citation needed]
Contents |
Mapping
Mapping Java classes to database tables is accomplished through the configuration of an XML file or by using Java Annotation. When using an XML file, Hibernate can generate skeletal source code for the persistence classes. This is unnecessary when annotation is used. Hibernate can use the XML file or the annotation to maintain the database schema.
Facilities to arrange one-to-many and many-to-many relationships between classes are provided. In addition to managing association 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
Persistence
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.[1]
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 a 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.
Integration
Hibernate can be used both in standalone Java applications and in Java EE applications using servlets or EJB session beans. 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.
History
Hibernate was developed by a team of Java software developers around the world led by Gavin King. JBoss, Inc. (now part of Red Hat) later hired the lead Hibernate developers and worked with them in supporting Hibernate.
The current version of Hibernate is Version 3.x. This version has new features like a new Interceptor/Callback architecture, user defined filters, and JDK 5.0 Annotations (Java's metadata feature). Hibernate 3 is now a certified implementation of the Java Persistence API 1.0 specification via a wrapper for the Core module which provides conformity with the JSR 220 JPA standard.
Application programming interface
The Hibernate API is provided in the Java package org.hibernate.
org.hibernate.SessionFactory interface
References immutable and threadsafe object creating new Hibernate sessions. Hibernate-based applications are usually designed to make use only of a single instance of the class implementing this interface (often exposed using a singleton design pattern).
org.hibernate.Session 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) of the objects, fetching the persisted ones from the database and the management of the transaction demarcation.
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.
See also
- EclipseLink
- EJB 3.0
- NHibernate
- Spring Framework (Java)
- Serialization
- iBATIS
- Service Data Object
- Struts
References
Bibliography
- Elliott, James; O'Brien, Tim (April 22, 2008), Harnessing Hibernate (First ed.), O'Reilly Media, pp. 380, ISBN 0596517726, http://oreilly.com/catalog/9780596517724/
- King, Gavin; Christian, Bauer (November 24, 2006), Java Persistence with Hibernate (Second ed.), Manning Publications, pp. 880, ISBN 1932394885, http://www.manning.com/bauer2/
- Linwood, Jeff; Minter, Dave (August 25, 2006), Beginning Hibernate: From Novice to Professional (Third ed.), Apress, pp. 360, ISBN 1590596935, http://www.apress.com/book/view/9781590596937
- Minter, Dave; Linwood, Jeff (June 27, 2005), Pro Hibernate 3 (First ed.), Apress, pp. 242, ISBN 1590595114, http://www.apress.com/book/view/1590595114
- Iverson, Will (December 2, 2004), Hibernate: A J2EE Developer's Guide (First ed.), Addison Wesley, pp. 384, ISBN 0321268199, http://www.manning.com/bauer/
- Pugh, Eric; Gradecki, Joseph D. (October 8, 2004), Professional Hibernate (Programmer to Programmer) (First ed.), Wrox, pp. 456, ISBN 0764576771, http://p2p.wrox.com/book-professional-hibernate-148/
- King, Gavin; Christian, Bauer (August 1, 2004), Hibernate In Action (Second ed.), Manning Publications, pp. 400, ISBN 193239415X, http://www.manning.com/bauer/
- James, Elliott (May 10, 2004), Hibernate: A Developer's Notebook (First ed.), O'Reilly Media, pp. 190, ISBN 0596006969, http://oreilly.com/catalog/9780596006969/
External links
- Hibernate Home Page
- Hibernate 3 Tutorial
- Interview with Gavin King, founder of Hibernate
- Hibernate Tutorial
- Hibernate Reference Documentation
- Hibernate and HQL Query Tutorial
- HQL Guru - Running Hibernate Query Examples
- Hibernate Tutorial
|
|