本文介紹了實(shí)體包含UUID時,對H2數(shù)據(jù)庫的Hibernate數(shù)據(jù)庫架構(gòu)驗(yàn)證失敗的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
對于H2數(shù)據(jù)庫架構(gòu)映射到具有UUID的實(shí)體,休眠DDL驗(yàn)證失敗,并出現(xiàn)異常:
根本原因:org.hibernate.tool.schema.spi.SchemaManagementException:
架構(gòu)驗(yàn)證:列[testuuid]中遇到錯誤的列類型
在表[TEST.dummy]中找到[varinary(TYES#VARBINARY)],但是
預(yù)期為[BINARY(TYES#BINARY)]
設(shè)置:
Hibernate 5.2.9最終版
h2 1.4.194
進(jìn)一步的休眠設(shè)置:
hibernate.hbm2ddl.auto=驗(yàn)證
未顯式設(shè)置數(shù)據(jù)庫方言。
h2 DDL最初是使用Hibernate生成的,導(dǎo)致UUID在h2數(shù)據(jù)庫架構(gòu)中由””BINARY””表示。
禁用驗(yàn)證有效,但不是選項(xiàng)。
如何解決此問題?
推薦答案
根本原因h2數(shù)據(jù)庫中的某些數(shù)據(jù)類型是同義詞,但hibernate currently does not handle this fact。
存在another stackoverflow question targeting a similar issue,其中H2返回同義詞類型,而不是預(yù)期的類型。
Aworkaround is proposed in the related hibernate bugtracker ticket。只需實(shí)現(xiàn)一個自定義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設(shè)置中注冊:
spring.jpa.Properties.hibernate.Dialect=you.pckg.name.H.DialectCustom
這篇關(guān)于實(shí)體包含UUID時,對H2數(shù)據(jù)庫的Hibernate數(shù)據(jù)庫架構(gòu)驗(yàn)證失敗的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,






