【发布时间】:2015-05-21 07:41:52
【问题描述】:
我目前正在为一个项目升级 Hibernate,从 3.x 升级到 4.3.9,我遇到了一些奇怪的错误。我在实体中有几个枚举值,都映射为@Enumerated(EnumType.STRING)。在以前的 Hibernate 版本中,这将被映射为 VARCHAR(255)。但是现在,使用 MySQL,Hibernate 尝试将其映射为 tinyblob,这导致验证失败。
据我从MySQLDialect 得知,Hibernate 认为这是tinyblob 的唯一方法是类型映射到Types.VARBINARY。但除了VARCHAR 之外,我真的看不出有什么理由将其映射为其他任何东西。
查看以前版本的Hibernate、4.1.1,在SimpleValueBinder可以看到如下代码:
if ( enumType != null ) {
if ( javax.persistence.EnumType.ORDINAL.equals( enumType ) ) {
typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.INTEGER ) );
}
else if ( javax.persistence.EnumType.STRING.equals( enumType ) ) {
typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.VARCHAR ) );
}
else {
throw new AssertionFailure( "Unknown EnumType: " + enumType );
}
这是有道理的,并且会使类型成为VARCHAR。但是,在同一类4.3.9 中,缺少此构造。此外,该类似乎已进行了相当大的重构。
这可能是版本 4.3.9of Hibernate 中的错误吗?
更新:奇怪的是,我在使用 Hibernate 4.3.10 和 MSSQL 时遇到完全相同的错误。
【问题讨论】:
-
我也有同样的问题,谁有答案?我正在使用 HB 5.0.6。
标签: java mysql hibernate enums