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>