Hibernate.orgCommunity Documentation

Hibernate Developer Guide

3.6.10.Final

February 8, 2012


Working with both Object-Oriented software and Relational Databases can be cumbersome and time consuming. Development costs are significantly higher due to a paradigm mismatch between how data is represented in objects versus relational databases. Hibernate is an Object/Relational Mapping solution for Java environments. The term Object/Relational Mapping refers to the technique of mapping data from an object model representation to a relational data model representation (and visa versa). See http://en.wikipedia.org/wiki/Object-relational_mapping for a good high-level discussion.

Note

While having a strong background in SQL is not required to use Hibernate, having a basic understanding of the concepts can greatly help you understand Hibernate more fully and quickly. Probably the single best background is an understanding of data modeling principles. You might want to consider these resources as a good starting point:

Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities. It can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC. Hibernate’s design goal is to relieve the developer from 95% of common data persistence-related programming tasks by eliminating the need for manual, hand-crafted data processing using SQL and JDBC. However, unlike many other persistence solutions, Hibernate does not hide the power of SQL from you and guarantees that your investment in relational technology and knowledge is as valid as always.

Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects.

Hibernate understands how to connect to a database through an interface org.hibernate.connection.ConnectionProvider. While org.hibernate.connection.ConnectionProvider is considered an extension SPI, Hibernate comes with a number of built-in providers.

A Dialect informs Hibernate of the capabilities of the underlying database. This role is fulfilled by an instance of a org.hibernate.dialect.Dialect subclass. The Dialect is one of the most important pieces of information given to the Hibernate org.hibernate.Sessionfactory during startup as it allows Hibernate to properly plan how it needs to communicate with the database.

Assuming a org.hibernate.connection.ConnectionProvider has been set up according to Section 1.1, “JDBC Connections” then Hibernate will attempt to automatically determine the Dialect to use based on the java.sql.DatabaseMetaData reported by a java.sql.Connection obtained from that org.hibernate.connection.ConnectionProvider.

This functionality is provided by a series of org.hibernate.dialect.resolver.DialectResolver instances registered with Hibernate internally. Hibernate comes with a standard set of recognitions. If your application requires extra Dialect resolution capabilities, it would simply register a custom implementation of org.hibernate.dialect.resolver.DialectResolver as follows


Registered org.hibernate.dialect.resolver.DialectResolver are prepended to an internal list of resolvers, so they take precedence before any already registered resolvers including the standard one.