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

Hibernate
開発元 レッドハット
最新版
5.4.2[1] / 2019年3月22日 (5年前) (2019-03-22)
リポジトリ ウィキデータを編集
対応OS クロスプラットフォーム
プラットフォーム Javaプラットフォーム
種別 ORM
ライセンス LGPL
公式サイト www.hibernate.org
テンプレートを表示

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

HibernateはスタンドアローンJavaアプリケーションにも使えるし、Java ServletEJBセッションビーンを使ったJakarta 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
一般的なデータベースの制約(数値の範囲、文字列形式、nullチェックなど)をアノテーションを使って検証可能にするモジュール

永続性クラスのマッピング 編集

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.Listjava.util.Setなど)は同一性(参照)比較を行う。

API 編集

Hibernate APIは、パッケージ org.hibernateで提供されている。

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

脚注 編集

  1. ^ Hibernate ORM 5.4.2.Final released”. 2019年4月7日閲覧。

関連項目 編集

参考文献 編集

外部リンク 編集