正如您所写的,如果您使用
MySQL5InnoDBDialect
:
public class MySQL5InnoDBDialect extends MySQL5Dialect {
public boolean supportsCascadeDelete() {
return true;
}
public String getTableTypeString() {
return " ENGINE=InnoDB";
}
public boolean hasSelfReferentialForeignKeyBug() {
return true;
}
}
使用此方言将导致Hibernate添加
ENGINE=InnoDB
CREATE TABLE
声明。但这是全局设置,不能在实体级别调整此行为。
5.7. Auxiliary database objects
. 根据文件:
辅助数据库对象允许
数据库对象。结合
Hibernate的模式进化工具,
他们有能力完全定义
Hibernate中的用户模式
映射文件。虽然是设计的
专门用于创建和删除
触发器或存储
java.sql.Statement.execute()方法无效
等等)。基本上有两种模式
用于定义辅助数据库
物体:
中的CREATE和DROP命令
<hibernate-mapping>
...
<database-object>
<create>CREATE TRIGGER my_trigger ...</create>
<drop>DROP TRIGGER my_trigger</drop>
</database-object>
</hibernate-mapping>
类,该类构造
删除命令。此自定义类必须
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>
另一种选择是(ab)使用
Hibernate import.sql feature
ALTER