
In 2005, Hibernate version 3.0 was released. (now part of Red Hat) later hired the lead Hibernate developers in order to further its development.

In early 2003, the Hibernate development team began Hibernate2 releases, which offered many significant improvements over the first release. The original goal was to offer better persistence capabilities than those offered by EJB2 by simplifying the complexities and supplementing certain missing features. Hibernate was started in 2001 by Gavin King with colleagues from Cirrus Technologies as an alternative to using EJB2-style entity beans. Unlike J2EE, Hibernate can switch databases. 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. In contrast, a component is subordinate to an entity and can be manipulated only with respect to that entity. In Hibernate jargon, an entity is a stand-alone object in Hibernate's persistent mechanism which can be manipulated independently of other objects. 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. It can also be included as a feature in other programming languages. Hibernate can be used both in standalone Java applications and in Java EE applications using servlets, EJB session beans, and JBI service components. For example, a parent Album class object can be configured to cascade its save and delete operations to its child Track class objects. Related objects can be configured to cascade operations from one object to the other. Lazy loading is the default as of Hibernate 3. Hibernate can be configured to lazy load associated collections. Java generics, introduced in Java 5, are also supported. Ĭollections of data objects are typically stored in Java collection classes, such as implementations of the Set and List interfaces. Hibernate recommends providing an identifier attribute, and this is planned to be a mandatory requirement in a future release. Proper behavior in some applications also requires special attention to the equals() and hashCode() methods in the object classes. The only strict requirement for a persistent class is a no-argument constructor, though not necessarily public. Hibernate provides transparent persistence for Plain Old Java Objects (POJOs). Without this capability, changing the database would require individual SQL queries to be changed as well, leading to maintenance issues. It generates database independent queries so that there is no need to write database-specific queries. HQL (Hibernate Query Language) is the object-oriented version of SQL. Criteria Query is used to modify the objects and provide the restriction for the objects. Criteria Queries are provided as an object-oriented alternative to HQL. Hibernate provides a SQL inspired language called Hibernate Query Language (HQL) for writing SQL-like queries against Hibernate's data objects. Mapping informs the ORM tool of what Java class object to store in which database table. Mapping is a way of resolving the object–relational impedance mismatch problem.

This problem is called " object–relational impedance mismatch". Objects in an object-oriented application follow OOP principles, while objects in the back-end follow database normalization principles, resulting in different representation requirements. Mapping a single property to multiple columns.Mapping Java Enums to columns as though they were regular properties.Overriding the default SQL type when mapping a column to a property.This makes the following scenarios possible: Hibernate supports the mapping of custom value types. In addition to managing associations between objects, Hibernate can also manage reflexive associations wherein an object has a one-to-many relationship with other instances of the class type. There are provided facilities to arrange one-to-many and many-to-many relationships between classes.

Hibernate can use the XML file or the Java annotations to maintain the database schema. This is auxiliary when annotations are used.
HAVA JAVA CODE
When using an XML file, Hibernate can generate skeleton source code for the persistence classes. The mapping of Java classes to database tables is implemented by the configuration of an XML file or by using Java Annotations.
