Caché Hibernate 言語の使用法
Java Persistence Architecture (JPA) は Java プロジェクト内の複雑なオブジェクト階層に推奨される永続性テクノロジです。Caché は、現在、JPA 仕様の Hibernate 実装を介した JPA 1.0 および 2.0 をサポートしています。
Hibernate は、リレーショナル・データベースにオブジェクト/リレーショナル・マッピング (ORM) サービスを提供する JDBC のラッパとして動作する JBoss のオープン・ソース・フレームワークです。Hibernate は、ベンダに依存しない永続性サービスを提供します。このサービスは、一部のプロジェクトの要件である場合があります。
SQL の実装はベンダごとに若干異なるので、Hibernate は、ベンダ提供の "方言 (dialect)" を備え、特定のデータベースへのマッピングをカスタマイズします。現在の Hibernate ディストリビューション (3.2.1GA 以降) には、高性能なカスタマイズされた Caché 言語クラスが含まれています。
要件
このドキュメントでは、以下のソフトウェアがシステムにインストールされていることを前提としています。
-
Caché 2010.2 以降
-
Hibernate 3.2.1GA 以降 (Caché 言語拡張機能を含むいずれかのバージョン)。Hibernate は、www.hibernate.org からダウンロードできます。
-
Java JDK のサポート対象バージョン (このリリース用のオンライン・ドキュメント "インターシステムズでサポートされるプラットフォームOpens in a new tab" の “サポート対象 Java テクノロジ” を参照してください)。
インストールと構成
このセクションでは、Caché で Hibernate を使用するためにシステムを設定する手順を説明します。この手順では、正しいバージョンの Caché と Hibernate がインストール済みで操作可能な状態であることが前提となっています。
ディレクトリ
この章の手順では、以下のディレクトリを参照します。
-
<install-dir> — Caché のインストール・ディレクトリ (ご使用のシステムの <install-dir> の場所については、"Caché インストール・ガイド" の “Caché の既定のインストール・ディレクトリ” を参照してください)。
-
<hibernate_root> — Hibernate のインストール・ディレクトリ (既定では C:\hibernate-3.2)。
システムの設定
システムに以下の変更を行います。
-
cache-jdbc-2.0.0.jar ファイル
cache-jdbc-2.0.0.jar ファイルには、Caché JDBC ドライバが含まれています。まだ行っていない場合には、適切なバージョンの cache-jdbc-2.0.0.jar を既定位置から次の場所にコピーしてください (“Caché Java クラス・パッケージ” を参照)。
<hibernate_root>\lib\cache-jdbc-2.0.0.jar
-
Java Classpath
以下が Java Classpath 上に存在することを確認します。
-
<hibernate_root>\lib の jar ファイル
-
Hibernate 構成ファイル (hibernate.properties および hibernate.cfg.xml) が保持されているディレクトリ既定では、両方のファイルは以下にあります。
<hibernate_root>\etc
-
Hibernate 構成
Hibernate 構成ファイル (hibernate.properties または hibernate.cfg.xml のいずれか) では、データベースの接続情報、および Caché 言語クラスの名前を指定します。
以下の 5 つの構成プロパティが必要です。
-
dialect — Caché 言語クラスの完全修飾名。ベースの言語クラスは以下のとおりです。
org.hibernate.dialect.Cache71Dialect
Hibernate 主キー・ジェネレータ・クラスのサポートを有効にするには、このベース・クラスから派生したカスタム言語クラスを使用します ("シーケンスのサポート" を参照)。
-
driver_class — Caché JDBC ドライバの完全修飾名。
com.intersys.jdbc.CacheDriver
JDBC ドライバは、cache-jdbc-2.0.0.jar ファイルに含まれています (詳細は、“システムの設定” を参照)。
-
username — アクセスする Caché ネームスペースのユーザ名 (既定では、_SYSTEM)。
-
password — Caché ネームスペースのパスワード (既定では、SYS)。
-
url — Caché JDBC ドライバの URL。URL の形式は以下のとおりです。
jdbc:Cache://<host>:<port>/<namespace>
ここで <host> は、Caché をホストするマシンの IP アドレス、<port> は、Caché インスタンスのスーパーサーバ TCP ポート、<namespace> は、Caché データベースのデータを含むネームスペースです (詳細は、"JDBC 接続 URL の定義" を参照)。
hibernate.properties の一般的なエントリには、以下の行が含まれます。
hibernate.dialect org.hibernate.dialect.Cache71Dialect
hibernate.connection.driver_class com.intersys.jdbc.CacheDriver
hibernate.connection.username _SYSTEM
hibernate.connection.password SYS
hibernate.connection.url jdbc:Cache://127.0.0.1:1972/USER
以下の例は、hibernate.cfg.xml に表示される情報と同じ情報を示しています。
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.Cache71Dialect
</property>
<property name="connection.driver_class">
com.intersys.jdbc.CacheDriver</property>
<property name="connection.username">_SYSTEM</property>
<property name="connection.password">SYS</property>
<property name="connection.url">
jdbc:Cache://127.0.0.1:1972/USER
</property>
</session-factory>
</hibernate-configuration>
hibernate.properties および hibernate.cfg.xml の両方に同じプロパティが設定されている場合、Hibernate は hibernate.cfg.xml の値を使用します。
サポートされている機能
SQL での Hibernate の使用法
以下の SQL 機能は、Caché Hibernate 言語ではサポートされません。
-
WHERE 句では、longvarbinary 型および longvarchar 型はサポートされません。
-
WHERE (A,B,C)=(1,2,3) などの行値式はサポートされません。
シーケンスのサポート
Caché 言語のベース・クラスは、パッケージ org.hibernate.dialect では Cache71Dialect です。このクラスを拡張して、Hibernate 主キー・ジェネレータ・メソッドのサポートをオプションで有効にすることができます。Oracle 形式のシーケンスを有効にする場合、または他の非標準生成メソッドを使用する場合は、このサポートが必要です。
次のクラスを作成します。
public Cache71SequenceDialect extends Cache71Dialect {
public boolean supportsSequences() {
return true;
}
}
hibernate.properties ファイルまたは hibernate.cfg.xml ファイルの言語プロパティで、新しいクラスの完全修飾名を指定します ("Hibernate 構成" の例を参照)。例えば、パッケージの名前が mySeqDialect である場合、hibernate.properties のエントリは以下のようになります。
hibernate.dialect mySeqDialect.Cache71SequenceDialect
hibernate.cfg.xml のエントリは以下のとおりです。
<property name="dialect">
mySeqDialect.Cache71SequenceDialect
</property>
Hibernate シーケンス言語サポートをインストールするには、CacheSequences プロジェクトをアプリケーションがアクセスするネームスペースにロードします。
-
スタジオで、アプリケーションがアクセスするネームスペースに変更します。
-
スタジオのメニューで、[ツール]→[ローカルからインポート...] を選択します。
-
ファイル・ダイアログで、以下の CacheSequences.xml プロジェクト・ファイルを開きます。
<hibernate_root>/etc/CacheSequences.xml.
スタジオは、Caché InterSystems.Sequences クラスをロードしてコンパイルします。
使用するシーケンス・ジェネレータは、Hibernate マッピングの id プロパティに指定されます。Oracle 形式のシーケンスは、sequence または seqhilo を指定することで生成できます。native を指定すると、Caché が基礎となるデータベースである場合、identity ジェネレータが使用されます。これらのクラスの詳細は、"Hibernate リファレンス・ドキュメントOpens in a new tab" を参照してください (具体的には、第 5 章 "基本的な O/R マッピング" にある "idOpens in a new tab" セクションを参照してください)。
以下の例は、Hibernate マッピングでのシーケンス・ジェネレータの使用法を示します。
<id name="id" column="uid" type="long" unsaved-value="null">
<generator class="seqhilo">
<param name="sequence">EVENTS_SEQ</param>
<param name="max_lo">0</param>
</generator>
</id>
シーケンス・クラスは、挿入を実行する直前にストアド・プロシージャを呼び出してインクリメントされるカウンタ・テーブルを保持します。例えば以下のようにします。
call InterSystems.Sequences_GetNext("Name")
// perform the insert here
また、標準の SQL 文でテーブルをインクリメントすることもできます。例えば以下のようにします。
SELECT InterSystems.Sequences_GetNext(sequencename)
FROM InterSystems.Sequences
WHERE Name='sequencename'
このテーブルを InterSystems.Sequences テーブルとして照会することもできます。データは、実際にはグローバル ^InterSystems.Sequences に格納されます。^InterSystems.Sequences* をすべてのアプリケーションに共通の場所にマッピングすることにより、システム全体に及ぶシーケンスを作成できます。