让 JPA 生成具有指定行格式的表
Getting JPA to generate tables with specified row format
我在 JPA 休眠中使用 play 2 框架。我的目标是让 JPA 使用特定的 ROW_FORMAT:
在新数据库上生成表
这是 JPA 在启动时执行的内容:
create table Admin (
..
) ENGINE=InnoDB
这就是我想要的:
create table Admin (
..
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC
persistance.xml 看起来像这样:
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
我尝试寻找在 java 代码中使用注释的方法,或者在 XML conf 中寻找特定的 属性。我运气不好。
您可以通过子类化 MySQL5InnoDBDialect 并重写 getTableTypeString()
方法来实现,如下所示。
public class MySQL5CustomInnoDBDialect extends MySQL5InnoDBDialect{
/**
* Call to super returns " type=innodb". 'Type' is a
* deprecated MySQL synonym for 'engine'
* so you may want to ignore the super call and use:
* " engine=innodb ROW_FORMAT=DYNAMIC"
*/
public String getTableTypeString() {
return super.getTableTypeString() + " ROW_FORMAT=DYNAMIC";
}
}
并且显然将其设置为您的方言:
<property name="hibernate.dialect" value="org.foo.MySQL5CustomInnoDBDialect"/>
我在 JPA 休眠中使用 play 2 框架。我的目标是让 JPA 使用特定的 ROW_FORMAT:
在新数据库上生成表这是 JPA 在启动时执行的内容:
create table Admin (
..
) ENGINE=InnoDB
这就是我想要的:
create table Admin (
..
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC
persistance.xml 看起来像这样:
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
我尝试寻找在 java 代码中使用注释的方法,或者在 XML conf 中寻找特定的 属性。我运气不好。
您可以通过子类化 MySQL5InnoDBDialect 并重写 getTableTypeString()
方法来实现,如下所示。
public class MySQL5CustomInnoDBDialect extends MySQL5InnoDBDialect{
/**
* Call to super returns " type=innodb". 'Type' is a
* deprecated MySQL synonym for 'engine'
* so you may want to ignore the super call and use:
* " engine=innodb ROW_FORMAT=DYNAMIC"
*/
public String getTableTypeString() {
return super.getTableTypeString() + " ROW_FORMAT=DYNAMIC";
}
}
并且显然将其设置为您的方言:
<property name="hibernate.dialect" value="org.foo.MySQL5CustomInnoDBDialect"/>