簡體   English   中英

Hibernate 4.3.9和映射枚舉

[英]Hibernate 4.3.9 and mapping enums

我目前正在為一個項目將Hibernate從3.x升級到4.3.9,並且遇到了一些奇怪的錯誤。 我在實體中有幾個枚舉值,它們都映射為@Enumerated(EnumType.STRING) 在以前的Hibernate版本中,這將被映射為VARCHAR(255) 但是現在,Hibernate嘗試使用MySQL將其映射為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的同一類中,缺少此構造。 同樣,該類似乎已被大量重構。

這可能是Hibernate版本4.3.9中的錯誤嗎?

更新:奇怪的是,我收到與Hibernate 4.3.10MSSQL完全相同的錯誤。

我通過介紹自己的Hiberante方言解決了這個問題,其中包含以下行:

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

不過,更多的是解決方法,而不是修復程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM