实体包含UUID时,对H2数据库的Hibernate数据库架构验证失败

Hibernate database schema validation fails for H2 database when entity contains UUID(实体包含UUID时,对H2数据库的Hibernate数据库架构验证失败)

本文介绍了实体包含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数据库架构验证失败

基础教程推荐