Hibernate

Hibernate は、Java のためのオブジェクト関係マッピング  ライブラリであり、オブジェクト指向のドメインモデルを関係データベースにマッピングするためのフレームワークを提供する。Hibernate は、永続性に関わるデータベースアクセスを直接高レベルなオブジェクト操作機能に置換することでオブジェクト指向と関係モデルの不整合を解決する。

Hibernate はオープンソースのフリーソフトウェアであり、GNU Lesser General Public License で提供されている。

1. 機能概要
-------

第一の機能は、Javaクラスからデータベースの表へのマッピングである。また、データのクエリと検索機能も提供する。SQL呼び出しを自動生成することで、開発者がSQL呼び出しの結果をいちいちオブジェクトに変換する手間から解放し、性能への影響を最小にしつつ、あらゆるSQLデータベースへの移植性を達成している。

Hibernateは Plain Old Java Object  のための透過的永続性を提供する。永続性クラスに要求されることは、引数のないコンストラクタが存在することであり、コンストラクタの可視性が//public//でなくともよい。

Hibernateには「ダーティチェッキング」機能がある。この機能は、永続的オブジェクトの変更されたフィールドについてのみSQLによる更新を行うもので、不必要なデータベース更新を削減する。

Hibernateは「HQL」というSQLライクなクエリ言語を提供している。オブジェクト指向的な代替手段としてクライテリアクエリも提供されている。

HibernateはスタンドアローンのJavaアプリケーションにも使えるし、Java ServletやEJBセッションビーンを使ったJakarta EEアプリケーションにも使える。

2. 歴史
-----

HibernateはGavin Kingをリーダーとして世界中のJavaソフトウェア開発者がチームを結成して開発した。その後、JBoss社がHibernateの主要開発者を雇い入れ、サポートを行うようになった。

バージョン3.xでは、Interceptor/Callbackアーキテクチャ、ユーザ定義フィルタ、JDK 5.0アノテーションなどの新機能が新たに追加された。このバージョンはEJB 3.0仕様とも非常に近く、JBossのEJB 3.0実装の基盤となった。

3. モジュール
--------

Hibernateはモジュール化され、それぞれ独立したチームが開発している。

ORM  主モジュールであり、主要機能が全て実装されている。 Annotations JSR 175 のアノテーションサポート。XMLによるメタデータマッピングの代替手法を提供する。 Entity manager Coreモジュールのラッパーであり、JSR 220 JPA Entity Manager標準をサポート Envers 履歴管理 Metamodel Generator OGM Object/Grid Mapper。NoSQL対応。 Search Hibernateで管理されている永続性実体群に対して、Luceneを使った検索を行うための抽象化層を提供するモジュール Shards Hibernate Coreの縦分割を提供するモジュール Tools Apache Antのタスク群やEclipseプラグインなど、Hibernateを使った開発に役立つモジュール Validator 一般的なデータベースの制約をアノテーションを使って検証可能にするモジュール

4. 永続性クラスのマッピング
---------------

JavaオブジェクトとSQLの変換をするには、JavaクラスとSQLテーブルの間の「マッピングデータ」がなければならない。Hibernateはこのためのいくつかの手段を提供する。

XMLメタデータ 最も一般的な手法。各クラスは、所定のDTDスキーマに対応したXML文書にて、XML要素として表現される。 アノテーションによるメタデータ JSR 175に準拠して、永続性クラスのソースコードに注釈として記述する。Hibernateがそれを解釈して設定ファイルにそのクラスに関する情報を追加する。アノテーション機能は別モジュール化されている。 XDocletメタデータ JSR 175およびJava 5.0がリリースされる以前に、アノテーションと似たような機能を実装したもの。XDoclet属性は永続性クラスのソースファイル上で記述され、Apache Antの独立したタスクで構文解析され、XMLメタデータを生成する。 メタデータのプログラムからの操作 Hibernateは、SessionFactoryのインスタンスを生成する前に、マッピングの詳細を操作するAPIも提供している。

5. ダーティチェッキング
-------------

不要なSQLによる更新を防ぐため、Hibernateはダーティチェッキングという機能を提供している。この機能は、永続的オブジェクトの変更されたフィールドやコレクションのみを更新できるようにするものである。コレクションに含まれない部分の更新が必要かどうかを確認するため、HibernateはそれらのフィールドをObject.equalsメソッドで比較する。一方、コレクションフィールドは同一性比較を行う。

6. API
------

Hibernate APIは、パッケージ [1]で提供されている。

[2]インタフェース 新たなHibernateセッションを生成するイミュータブルでスレッドセーフなオブジェクトへの参照。Hibernateベースのアプリケーションは、一般にこのインタフェースを実装したクラスのインスタンスを1つだけ使う。 [3]インタフェース Hibernateセッション、すなわちデータベース上で行う操作の主要ポイントを表す。オブジェクトの永続性状態を管理し、データベースから永続的オブジェクトを取り出し、トランザクション境界を管理する。セッションは、データベース上の論理トランザクションと同程度に維持されることを意図している。セッションはスレッドセーフではなく、複数のクライアントから使われることを意図していない。

7. 脚注
-----

8. 関連項目
-------

EJB 3.0
NHibernate
Spring Framework
シリアライズ
iBATIS
Service Data Objects
Apache Struts

9. 参考文献
-------

Christian Bauer, Gavin King: Java Persistence with Hibernate, Manning Publications Company, ISBN 1-932394-88-5
Christian Bauer, Gavin King: Hibernate In Action, Manning Publications Company, ISBN 1-932394-15-X
Will Iverson: Hibernate: A J2EE™ Developer's Guide, Addison Wesley Professional, ISBN 0-321-26819-9
James Elliott: Hibernate: A Developer's Notebook, O'Reilly, ISBN 0-596-00696-9

10. 外部リンク
---------

[4]