[英]Spring Boot Hibernate mapping set of enums to boolean columns
[英]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.10
和MSSQL
完全相同的錯誤。
我通過介紹自己的Hiberante方言解決了這個問題,其中包含以下行:
registerColumnType(Types.VARBINARY, 255, "varchar(255)");
不過,更多的是解決方法,而不是修復程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.