为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过遗留映射在 Hibernate 5 中指定基于序列的生成值

如何通过遗留映射在 Hibernate 5 中指定基于序列的生成值

浮云间 2023-06-08 14:08:23
我的问题是我正在将项目组合从 Java 8/Hibernate 4.x 堆栈迁移到 Java 11/Hibernate 5.4 堆栈。在第二种情况下,一旦应用程序尝试保存对象,我就会收到此错误:org.postgresql.util.PSQLException:错误:关系&ldquo;hibernate_sequence&rdquo;不存在我上面提到的另一个问题的答案提供了一些见解,但我仍然不明白为什么会出现该错误:我们所有的实体一直在使用每个自己的序列,并且该序列在相应的 hbm.xml 中明确指定。这是一个这样的映射文件:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping default-lazy="false">    <class name="&hellip;" table="data_receiving">        <id name="systemId" column="system_id">            <generator class="sequence">                <param name="sequence">system_id_seq</param>            </generator>        </id>        <property name="source" column="source" />        &hellip;    </class></hibernate-mapping>看起来序列的规范被忽略了。我查阅了一些有关使用 XML 的遗留 Hibernate 映射的文档,但我找不到与 Hibernate 5 相关的任何内容,据报道 Hibernate 5仍支持此类映射。一个解决方案可能是完全迁移到注释,但该组合包含十几个应用程序,这些应用程序具有数十个表和总数量(在一个应用程序中)超过 1200 列。这项任务根本不切实际,更何况一些应用程序正在从头开始重写为微服务。我的问题是是否仍然支持我所使用的序列生成标识符的规范?
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我不得不深入研究 Hibernate 的源代码以找到一个:参数sequence已重命名为sequence_name.

<param name="sequence">system_id_seq</param>

现在必须

<param name="sequence_name">system_id_seq</param>

这使得有必要更新所有 hbm.xml 文件,这是我在 Eclipse 中使用查找和替换所做的。


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信