本文介紹了實體包含UUID時,對H2數據庫的Hibernate數據庫架構驗證失敗的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
對于H2數據庫架構映射到具有UUID的實體,休眠DDL驗證失敗,并出現異常:
根本原因:org.hibernate.tool.schema.spi.SchemaManagementException:
架構驗證:列[testuuid]中遇到錯誤的列類型
在表[TEST
.dummy
]中找到[varinary(TYES#VARBINARY)],但是
預期為[BINARY(TYES#BINARY)]
設置:
Hibernate 5.2.9最終版
h2 1.4.194
進一步的休眠設置:
hibernate.hbm2ddl.auto=驗證
未顯式設置數據庫方言。
h2 DDL最初是使用Hibernate生成的,導致UUID在h2數據庫架構中由””BINARY””表示。
禁用驗證有效,但不是選項。
如何解決此問題?
推薦答案
根本原因h2數據庫中的某些數據類型是同義詞,但hibernate currently does not handle this fact。
存在another stackoverflow question targeting a similar issue,其中H2返回同義詞類型,而不是預期的類型。
Aworkaround is proposed in the related hibernate bugtracker ticket。只需實現一個自定義Hibernate H2方言,它可能如下所示:
package your.pckg.name;
import java.sql.Types;
import org.hibernate.dialect.H2Dialect;
public class H2DialectCustom extends H2Dialect {
public H2DialectCustom() {
super();
registerColumnType(Types.BINARY, "varbinary");
}
}
和在您的休眠/JPA設置中注冊:
spring.jpa.Properties.hibernate.Dialect=you.pckg.name.H.DialectCustom
這篇關于實體包含UUID時,對H2數據庫的Hibernate數據庫架構驗證失敗的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,