Hibernate
 ウィキデータを編集
Hibernate の公式ロゴマーク
開発元 レッドハット
最新版
ウィキデータを編集
安定版
7.4.1[1] / 2026年6月9日 (7日前)
リポジトリ ウィキデータを編集
対応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は「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. ^ Release 7.4.1” (2026年6月9日). 2026年6月10日閲覧。

関連項目

編集

参考文献

編集
  • 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

外部リンク

編集

📚 Artikel Terkait di Wikipedia

ソフトウェアコンポーネント

(OSIDs) COMやCORBAの一部 SOAP IDL: W3C WDDX XML-RPC、SOAPの前身 制御の反転 (IoC) と Plain Old C++/Java Object (POCO/POJO) コンポーネントのフレームワーク パイプとフィルター UNIX オペレーティングシステム Brad

コンピュータ略語一覧

プラグアンドプレイ (Plug and Play) PNG Portable Network Graphics POD Plain Old Data POD Plain Old Documentation POP Post Office Protocol POS Point of Sales POSIX

C++11

キーワードは、式の全ての内容が constexpr である場合のコンパイル時定数性の可能性をコンパイラに伝えるだけのものである。 C++03では、構造体が Plain Old Data (POD) 型として扱われるためにはいくつかのルールに従う必要がある。これを満たす型は C と互換性のあるオブジェクトレイアウトを生成する。しかし、C++03

TCPやUDPにおけるポート番号の一覧

1085 TCP UDP WebObjects 公式 1098 TCP UDP rmiactivation, Java remote method invocation (RMI) activation 公式 1099 TCP UDP rmiregistry, Java remote method invocation