Hibernate

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

Hibernate
開発元 レッドハット
最新版
5.4.2[1] / 2019年3月22日 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() メソッドにも注意が必要)。

Hibernate には「ダーティチェッキング」機能がある。この機能は、永続的オブジェクトの変更されたフィールドについてのみ SQL による更新を行うもので、不必要なデータベース更新を削減する。

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

Hibernate はスタンドアローンJavaアプリケーションにも使えるし、Java ServletEJBセッションビーンを使った 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.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日閲覧。

関連項目

参考文献

  • 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

外部リンク

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.