我使用hibernate来管理我项目中的一些类。MySQL 5.5 是底层 RDMS。
因此,对于常规操作,我使用 org.hibernate.dialect.MySQL5InnoDBDialect 作为休眠方言。
但是对于单元测试,我使用的是 hsql 1.8.0.8,并且我使用 org.hibernate.dialect.HSQLDialect 作为测试的方言。
在我团队中的一位开发人员将“varchar”列更改为“mediumtext”之前,这不是问题。
现在我不能使用下 HSQLDialect 或 MySQL5InnoDBDialect 进行单元测试。
我尝试编写自己的方言,它从 HSQLDialect 扩展并将类型注册为
registerColumnType( Types.VARCHAR, 16777215, "mediumtext" );
在构造函数中,但这似乎不起作用。
我写的自定义方言如下
import org.hibernate.dialect.HSQLDialect;
public class HSqlMySqlDialect extends HSQLDialect{
public HSqlMySqlDialect() {
super();
registerColumnType( Types.VARCHAR, "mediumtext" );
}
}
我的测试 hibernate.cfg.xml 如下所示
<property name="dialect">com.alcatel.util.hibernate.HSqlMySqlDialect</property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:mem:testDB</property>
启动 ibernate sessionfactory 时出现的错误如下
ERROR [SchemaExport] Wrong data type: MEDIUMTEXT in statement [create table TABLE_NAME (ID bigint not null, VALUE mediumtext]
所以看起来创建表时没有使用方言。
有办法吗?