Hibernate
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Hibernate | |
開発元: | レッドハット |
---|---|
最新版: | 3.2.5.ga / 2007年7月31日 |
対応OS: | クロスプラットフォーム |
プラットフォーム: | Javaプラットフォーム |
種別: | ORM |
ライセンス: | LGPL |
公式サイト: | www.hibernate.org |
Hibernate は、Java のためのオブジェクト関係マッピング (ORM) ライブラリであり、オブジェクト指向のドメインモデルを関係データベースにマッピングするためのフレームワークを提供する。Hibernate は、永続性に関わるデータベースアクセスを直接高レベルなオブジェクト操作機能に置換することでオブジェクト指向と関係モデルの不整合を解決する。
Hibernate はオープンソースのフリーソフトウェアであり、GNU Lesser General Public License で提供されている。
目次 |
[編集] 機能概要
第一の機能は、Javaクラスからデータベースの表(およびJavaデータ型からSQLデータ型)へのマッピングである。また、データのクエリと検索機能も提供する。SQL呼び出しを自動生成することで、開発者がSQL呼び出しの結果をいちいちオブジェクトに変換する手間から解放し、性能への影響を最小にしつつ、あらゆるSQLデータベースへの移植性を達成している。
Hibernate は Plain Old Java Object (POJO) のための透過的永続性を提供する。永続性クラスに要求されることは、コンストラクタの引数がないことであり、public であることは必須ではない(一部アプリケーションでは、equals() と hashCode() メソッドにも注意が必要[1])。
Hibernate には「ダーティチェッキング」機能がある。この機能は、永続的オブジェクトの変更されたフィールドについてのみ SQL による更新を行うもので、不必要なデータベース更新を削減する。
Hibernate はスタンドアローンのJavaアプリケーションにも使えるし、Java Servlet や EJBセッションビーンを使った Java EE アプリケーションにも使える。
[編集] 歴史
Hibernate は Gavin King をリーダーとして世界中の Java ソフトウェア開発者がチームを結成して開発した。その後、JBoss社(現在はレッドハットの一部)が Hibernate の主要開発者を雇い入れ、サポートを行うようになった。
現在のバージョンは 3.x である。Interceptor/Callback アーキテクチャ、ユーザ定義フィルタ、JDK 5.0 アノテーション(Java のメタデータ機能)などの新機能が新たに追加されている。EJB 3.0 仕様とも非常に近く(ただし、EJB 3.0 仕様が完成し Java Community Process によってリリースされる前にリリースされた)、JBoss の EJB 3.0 実装の基盤となっている。
[編集] モジュール
Hibernate はモジュール化され、それぞれ独立したチームが開発している。
- Core
- 主モジュールであり、主要機能が全て実装されている(
Session
サポート、トランザクション管理、オブジェクト・キャッシング、HQL)。 - Annotations
- JSR 175 のアノテーションサポート(JSR 220 JPAアノテーション標準に準拠)。XMLによるメタデータマッピングの代替手法を提供する。
- Entity manager
- Core モジュールのラッパーであり、JSR 220 JPA Entity Manager 標準をサポート
- Shards
- Hibernate Core の縦分割を提供するモジュール
- Validator
- 一般的なデータベースの制約(数値の範囲、文字列形式、ヌルチェックなど)をアノテーションを使って検証可能にするモジュール
- Search
- Hibernate で管理されている永続性実体群に対して、Lucene を使った検索を行うための抽象化層を提供するモジュール
- Tools
- Apache Ant のタスク群やEclipseプラグインなど、Hibernate を使った開発に役立つモジュール
[編集] 永続性クラスのマッピング
JavaオブジェクトとSQLの変換をするには、JavaクラスとSQLテーブルの間の「マッピングデータ」がなければならない。Hibernate はこのためのいくつかの手段を提供する。
- XMLメタデータ
- 最も一般的な手法。各クラス(とそのプロパティ群)は、所定のDTDスキーマに対応したXML文書にて、XML要素として表現される。
- アノテーションによるメタデータ
- JSR 175 に準拠して、永続性クラスのソースコードに注釈として記述する。Hibernate がそれを解釈して設定ファイルにそのクラスに関する情報を追加する(あるいは、実行時に
Configuration
インスタンスに追加する)。アノテーション機能は別モジュール化されている。 - XDocletメタデータ
- JSR 175 および Java 5.0 がリリースされる以前に、アノテーションと似たような機能を実装したもの。XDoclet 属性は永続性クラスのソースファイル上で記述され、Apache Ant の独立したタスクで構文解析され、XMLメタデータを生成する。
- メタデータのプログラムからの操作
- Hibernate は、
SessionFactory
のインスタンスを生成する前に、マッピングの詳細を操作するAPI(Configuration
インスタンスを使用)も提供している。
[編集] ダーティチェッキング
不要なSQLによる更新を防ぐため、Hibernate はダーティチェッキングという機能を提供している。この機能は、永続的オブジェクトの変更されたフィールドやコレクションのみを更新できるようにするものである。コレクションに含まれない部分の更新が必要かどうかを確認するため、Hibernate はそれらのフィールドを Object.equals()
メソッドで比較する。一方、コレクションフィールド(java.util.List
や java.util.Set
など)は同一性(参照)比較を行う。
[編集] API
Hibernate API は、パッケージ org.hibernate で提供されている。
- org.hibernate.SessionFactory インタフェース
- 新たな Hibernate セッションを生成するイミュータブルでスレッドセーフなオブジェクトへの参照。Hibernate ベースのアプリケーションは、一般にこのインタフェースを実装したクラスのインスタンスを1つだけ使う(Singleton パターン を利用)。
- org.hibernate.Session インタフェース
- Hibernate セッション、すなわちデータベース上で行う操作の主要ポイントを表す。オブジェクトの永続性状態(一時的、永続的、分離)を管理し、データベースから永続的オブジェクトを取り出し、トランザクション境界を管理する。セッションは、データベース上の論理トランザクションと同程度に維持されることを意図している。セッションはスレッドセーフではなく、複数のクライアントから使われることを意図していない。
[編集] 関連項目
- 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