映射数据库对象
有时候我们希望在映射文件中创建和删除触发器、存储过程等数据库对象,Hibernate提供了<database-object .../>元素来满足这种需求。
使用<database-object .../>元素只有如下两种形式。
第一种形式是在映射文件中显式声明create和drop命令:
<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 .../>对。
第二种形式是提供一个类,这个类知道如何组织create和drop命令。这个特别类必须实现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>