Hibernate database schema validation fails for H2 database when entity contains UUID(实体包含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数据库架构验证失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:实体包含UUID时,对H2数据库的Hibernate数据库架构验证失败
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01