Hibernateとは
Hibernateは、
Javaアプリケーションにおいてオブジェクト関係マッピング(ORM)を提供するライブラリです。オブジェクト指向の
ドメインモデルと
関係データベースをマッピングすることで、開発者は
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): NoSQLデータベースをサポートします。
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