【问题标题】:Hibernate 4.3.9 and mapping enumsHibernate 4.3.9 和映射枚举
【发布时间】: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 之外,我真的看不出有什么理由将其映射为其他任何东西。

查看以前版本的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 中,缺少此构造。此外,该类似乎已进行了相当大的重构。

这可能是版本 4.3.9of Hibernate 中的错误吗?

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

【问题讨论】:

  • 我也有同样的问题,谁有答案?我正在使用 HB 5.0.6。

标签: java mysql hibernate enums


【解决方案1】:

我通过引入我自己的 Hiberante 方言解决了这个问题,其中包含以下行:

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

不过,更多的是一种解决方法而不是修复..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2023-03-20
    • 2016-09-10
    • 2011-02-03
    相关资源
    最近更新 更多