Hibernate 4.3.9和映射枚举



我目前正在为一个项目升级Hibernate,从3。x到4.3.9,我遇到了一些奇怪的错误。我在实体中有几个枚举值,都映射为@Enumerated(EnumType.STRING)。在以前的Hibernate版本中,这将被映射为VARCHAR(255)。但是现在,使用MySQL, Hibernate试图将其映射为tinyblob,这使得验证失败。

从我从MySQLDialect中可以看出,Hibernate认为这是tinyblob的唯一方法是将类型映射到Types.VARBINARY。但我真的看不出它被映射为VARCHAR以外的任何东西的理由。

查看Hibernate4.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的同一个类中,这个结构是缺失的。而且,看起来这个类已经被重构得相当重了。

这可能是Hibernate4.3.9版本的bug吗?

更新:奇怪的是,我得到完全相同的错误与Hibernate 4.3.10MSSQL

我通过引入我自己的hibernate方言来解决这个问题,它包含以下行:

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

相关内容

  • 没有找到相关文章

最新更新