Hibernate 4.3.9和映射枚举

时间:2015-05-21 07:41:52

标签: java mysql hibernate enums

我目前正在为一个项目升级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.9版本Hibernate中的错误吗?

更新:奇怪的是,我在使用Hibernate 4.3.10MSSQL时遇到了完全相同的错误。

1 个答案:

答案 0 :(得分:0)

我通过介绍我自己的Hiberante方言来解决这个问题,包含以下几行:

registerColumnType(Types.VARBINARY, 255, "varchar(255)");

更多的解决方法而不是修复,但是..