映射数据库对象

有时候我们希望在映射文件中创建和删除触发器、存储过程等数据库对象,Hibernate提供了<database-object .../>元素来满足这种需求。

使用<database-object .../>元素只有如下两种形式。

 第一种形式是在映射文件中显式声明createdrop命令:

    <hibernate-mapping auto-import="true" default-lazy="true">

        ...

        <database-object>

    <create>create trigger t_full_content_gen ...</create>

    <drop>create trigger t_full_content_gen</drop>

    </database-object>

  </hibernate-mapping>

上面的<create .../>元素里的内容就是一个完整的DDL语句,用于创建一个触发器;而<drop .../>元素里也定义了删除指定数据库对象的DDL,每个<database-object .../>元素中只有一组<create .../>,<drop .../>对。

 第二种形式是提供一个类,这个类知道如何组织createdrop命令。这个特别类必须实现org.hibernate.mapping.AuxiliaryDatabase-

Object接口。


<hibernate-mapping auto-import="true" default-lazy="true">

    ...

    <database-object>

<definition class="MyTriggerDefinition" />

</database-object>

</hibernate-mapping>

如果我们想指定某些数据库对象仅在特定的方言中才能使用,还可以在<database-object .../>元素里使用<dialect-scope .../>子元素来进行配置。

<hibernate-mapping auto-import="true" default-lazy="true">

    ...

    <database-object>

<create>create trigger t_full_content_gen ...</create>

<drop>create trigger t_full_content_gen</drop>

<!-- 定义仅对Mysql数据库有效 -->

<dialect-scope  name="org.hibernate.dialect.MySQLDialect"/>

<dialect-scope  name="org.hibernate.dialect.MySQLInnoDBDialect"/>

</database-object>

</hibernate-mapping>