【发布时间】:2013-03-29 08:47:37
【问题描述】:
我使用 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]
所以看起来创建表时没有使用方言。
有办法吗?
【问题讨论】:
-
问题是 org.hibernate.cfg.Configuration#buildSessionFactory() 不像类中的其他方法那样使用方言。见grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…所以看起来没有出路。
-
看看:grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…,mediumtext 正在被评论。应该找出原因。
-
正在使用方言:刚刚从休眠示例应用程序启动中取出日志。 信息:JDBC 驱动程序:MySQL-AB JDBC 驱动程序,版本:mysql-connector-java-5.1.22(修订版:${bzr.revision-id}) 2013 年 3 月 29 日 2: 44:56 PM org.hibernate.dialect.Dialect
信息:使用方言:org.hibernate.dialect.MySQLDialect -
好的,你说的应用启动是指会话工厂建立的时间?
-
是的,我就是这个意思。
标签: java mysql hibernate hsqldb