5.7. 補助的なデータベースオブジェクト
任意のデータベースオブジェクトのCREATEとDROPに対し、補助的なデータベースオブジェクト が可能です。Hibernateのスキーマエボリューションツールと連動することで、 Hibernateマッピングファイル内でユーザースキーマを完全に定義することができます。主にトリガやストアドプロシージャのようなデータベースオブジェクトを生成や削除するように設計されていますが、実際には
java.sql.Statement.execute()
メソッドによって実行できる任意の SQL コマンド(ALTER、INSERTなど)が実行できます。基本的に、補助的なデータベースオブジェクトを定義するモードは2つ存在します。
1つ目のモードは、CREATE と DROP コマンドをマッピングファイル に明示的にリストすることです:
<hibernate-mapping> ... <database-object> <create>CREATE TRIGGER my_trigger ...</create> <drop>DROP TRIGGER my_trigger</drop> </database-object> </hibernate-mapping>
2つ目のモードは、CREATE と DROP コマンドを構築するカスタムクラスを提供することです。このカスタムクラスは
org.hibernate.mapping.AuxiliaryDatabaseObject
インタフェースを実装しなければなりません。
<hibernate-mapping> ... <database-object> <definition class="MyTriggerDefinition"/> </database-object> </hibernate-mapping>
さらに、あるデータベース方言が使用される時にだけ適用するといったように、オプションでデータベースオブジェクトを使うケースを限定できます。
<hibernate-mapping> ... <database-object> <definition class="MyTriggerDefinition"/> <dialect-scope name="org.hibernate.dialect.Oracle9iDialect"/> <dialect-scope name="org.hibernate.dialect.Oracle10gDialect"/> </database-object> </hibernate-mapping>