Hibernate 6.2.x是否改变DDL生成方式?升级后初始化脚本报错
Hibernate 6.2.x升级后初始化SQL脚本执行失败问题
问题背景
项目包含初始化SQL脚本,示例语句如下:
INSERT INTO FROB VALUES(1, 'Foo', 2);
注:我清楚不指定插入列是不良实践,但目前无法修改此问题。
在Hibernate 6.2系列之前的所有版本中,该脚本均可正常运行。将Hibernate从6.1.7.Final升级到6.2.7.Final后,脚本持续执行失败,报错提示'Foo'无法转换为整数,这表明Hibernate生成的DDL中列的顺序发生了变化。以下是H2数据库的错误堆栈片段:
Caused by: org.h2.message.DbException: Data conversion error converting "Foo" [22018-220] at org.h2.message.DbException.get(DbException.java:212) at org.h2.value.ValueStringBase.getInt(ValueStringBase.java:133) at org.h2.value.Value.convertToInt(Value.java:1596)
当前通过常规Jakarta Persistence属性生成数据库schema,配置如下:
<properties> <property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="jakarta.persistence.sql-load-script-source" value="META-INF/init_script.sql"/> <!-- etc. --> </properties>
未配置其他特殊设置,且已查阅Hibernate 6.2迁移指南,未找到相关说明。
相关线索
发现Hibernate的HHH-17065问题与此相关,尽管我并未使用复合主键,但能确认Hibernate 6.2.x在DDL生成的列排序策略上做了重大调整,核心实现位于ColumnOrderingStrategyStandard.java类中。
提问
是否有办法影响Hibernate 6.2.x生成的DDL结果,恢复升级前的列顺序?
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

