Hibernate
開発元 | レッドハット |
---|---|
最新版 | 5.2[1] / 2018年3月8日 (2018-03-08) |
リポジトリ | github.com/hibernate/hibernate-orm |
対応OS | クロスプラットフォーム |
プラットフォーム | Javaプラットフォーム |
種別 | ORM |
ライセンス | LGPL |
公式サイト | www.hibernate.org |
Hibernate は、Java のためのオブジェクト関係マッピング (ORM) ライブラリであり、オブジェクト指向のドメインモデルを関係データベースにマッピングするためのフレームワークを提供する。Hibernate は、永続性に関わるデータベースアクセスを直接高レベルなオブジェクト操作機能に置換することでオブジェクト指向と関係モデルの不整合を解決する。
Hibernate はオープンソースのフリーソフトウェアであり、GNU Lesser General Public License で提供されている。
目次
1 機能概要
2 歴史
3 モジュール
4 永続性クラスのマッピング
5 ダーティチェッキング
6 API
7 脚注
8 関連項目
9 参考文献
10 外部リンク
機能概要
第一の機能は、Javaクラスからデータベースの表(およびJavaデータ型からSQLデータ型)へのマッピングである。また、データのクエリと検索機能も提供する。SQL呼び出しを自動生成することで、開発者がSQL呼び出しの結果をいちいちオブジェクトに変換する手間から解放し、性能への影響を最小にしつつ、あらゆるSQLデータベースへの移植性を達成している。
Hibernate は Plain Old Java Object (POJO) のための透過的永続性を提供する。永続性クラスに要求されることは、引数のない コンストラクタ が存在することであり、コンストラクタの可視性が public でなくともよい(一部アプリケーションでは、equals() と hashCode() メソッドにも注意が必要[1])。
Hibernate には「ダーティチェッキング」機能がある。この機能は、永続的オブジェクトの変更されたフィールドについてのみ SQL による更新を行うもので、不必要なデータベース更新を削減する。
Hibernate は「HQL」という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 はモジュール化され、それぞれ独立したチームが開発している。
- ORM (4.1 より前は Core)
- 主モジュールであり、主要機能が全て実装されている(
Session
サポート、トランザクション管理、オブジェクト・キャッシング、HQL)。 - Annotations
- JSR 175 のアノテーションサポート(JSR 220 JPAアノテーション標準に準拠)。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
- 一般的なデータベースの制約(数値の範囲、文字列形式、ヌルチェックなど)をアノテーションを使って検証可能にするモジュール
永続性クラスのマッピング
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 セッション、すなわちデータベース上で行う操作の主要ポイントを表す。オブジェクトの永続性状態(一時的、永続的、分離)を管理し、データベースから永続的オブジェクトを取り出し、トランザクション境界を管理する。セッションは、データベース上の論理トランザクションと同程度に維持されることを意図している。セッションはスレッドセーフではなく、複数のクライアントから使われることを意図していない。
脚注
^ “Fifteenth bug-fix release for ORM 5.2”. 2018年3月17日閲覧。
関連項目
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
外部リンク
- Hibernate公式サイト
- Interview with Gavin King, founder of Hibernate