Hibernateとは
Hibernateは、
[Java]]アプリケーションにおいてオブジェクト関係マッピング]を提供するライブラリです。オブジェクト指向の[[ドメインモデルと
関係データベースをマッピングすることで、開発者は
SQLを直接記述するのではなく、オブジェクト操作を通じてデータベースを操作できます。
Hibernateの主な機能
オブジェクトとデータベースのマッピング: Javaクラスとデータベースのテーブル、
Javaのデータ型と
SQLのデータ型をマッピングします。
データクエリと検索: SQLの自動生成により、開発者は
SQLの結果をオブジェクトに変換する手間から解放されます。また、HQL(Hibernate Query Language)やクライテリアクエリを用いて、オブジェクト指向的なクエリを記述できます。
透過的な永続性: POJO(Plain Old
Java Object)を永続化します。永続化クラスには引数なしの
コンストラクタがあればよく、可視性はpublicでなくても構いません。
ダーティチェッキング: 永続化されたオブジェクトの変更されたフィールドのみを
SQLで更新することで、不必要なデータベース更新を削減します。
移植性: 異なる
SQLデータベース間での移植性を実現します。
Hibernateの利用シーン
Hibernateは、スタンドアロンの
Javaアプリケーションだけでなく、
Java ServletやEJBセッションビーンを使った
Jakarta EEアプリケーションでも利用できます。
Hibernateの歴史
Hibernateは、Gavin King氏を中心に、世界中の
Javaソフトウェア開発者によって開発されました。その後、
JBoss社(現在は
レッドハットの一部)がHibernateの主要開発者を雇用し、サポートを提供するようになりました。
バージョン3.xでは、インターセプター、コールバックアーキテクチャ、ユーザー定義フィルタ、JDK 5.0
アノテーションなどの新機能が追加され、EJB 3.0仕様の基盤となりました。
Hibernateのモジュール
Hibernateは、以下のモジュールで構成されています。
ORM (Core): Hibernateの主要機能が実装されています。
Annotations: JSR 175の
アノテーションをサポートし、XMLによるマッピングの代替手段を提供します。
Entity manager: JPA(
Java Persistence API)のEntity Manager標準をサポートします。
Envers: 履歴管理機能を提供します。
Metamodel Generator:メタモデル生成。
OGM (Object/Grid Mapper): No
SQLデータベースをサポートします。
Search: Apache Luceneを使った検索機能を提供します。
Shards: データベースの縦分割をサポートします。
Tools: Apache AntタスクやEclipseプラグインなどの開発ツールを提供します。
Validator: アノテーションを使用して、データベースの制約を検証します。
永続性クラスのマッピング
Javaオブジェクトと
SQLの変換には、マッピングデータが必要です。Hibernateは、以下の手段でマッピングを提供します。
XMLメタデータ: XMLファイルでクラスとそのプロパティを定義します。
アノテーションによるメタデータ: JSR 175に準拠し、
Javaクラスのソースコードに
アノテーションとして記述します。
XDocletメタデータ: JSR 175以前に
アノテーションと同様の機能を提供していました。
プログラムによる操作: APIを用いてマッピングの詳細を操作できます。
ダーティチェッキングの詳細
ダーティチェッキングにより、変更されたフィールドのみが更新されるため、データベースの更新処理を効率化できます。プリミティブ型はObject.equals()メソッドで比較され、コレクションフィールドは同一性(参照)比較が行われます。
Hibernate API
Hibernate APIは、`org.hibernate`パッケージで提供されます。
`org.hibernate.SessionFactory`: Hibernateセッションを生成する
スレッドセーフなオブジェクトへの参照です。通常、アプリケーションではこのインターフェースを実装したクラスのインスタンスを1つだけ使用します(シングルトンパターン)。
`org.hibernate.Session`: データベース上での操作を表すインターフェースです。オブジェクトの永続状態を管理し、トランザクションの境界を制御します。セッションは
スレッドセーフではないため、複数のクライアントで使用することは想定されていません。
関連技術
EJB 3.0
NHibernate
Spring Framework
シリアライズ
iBATIS
Service Data Objects
Apache Struts
参考文献
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
外部リンク
公式ウェブサイト
Interview with Gavin King, founder of Hibernate