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

AbV*_*Vog 2 java hibernate hibernate-mapping

我有一个与这个问题类似的问题,但方式略有不同,这使得一切都不同。

\n\n

我的问题是,我正在将项目组合从 Java 8/Hibernate 4.x 堆栈迁移到 Java 11/Hibernate 5.4 堆栈。

\n\n

在第二种情况下,一旦应用程序尝试保存对象,我就会收到此错误:

\n\n
\n

org.postgresql.util.PSQLException:错误:关系“hibernate_sequence”不存在

\n
\n\n

我上面提到的另一个问题的答案提供了一些见解,但我仍然不明白为什么会发生该错误:我们所有的实体都在使用每个自己的序列,并且该序列在相应的 hbm.xml 中明确指定。这是一个这样的映射文件:

\n\n
<?xml version="1.0"?>\n<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" \n  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\n<hibernate-mapping default-lazy="false">\n    <class name="\xe2\x80\xa6" table="data_receiving">\n        <id name="systemId" column="system_id">\n            <generator class="sequence">\n                <param name="sequence">system_id_seq</param>\n            </generator>\n        </id>\n        <property name="source" column="source" />\n        \xe2\x80\xa6\n    </class>\n</hibernate-mapping>\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来序列的规范被忽略了。我查找了一些旧 Hibernate 与 XML 映射的文档,但我找不到与 Hibernate 5 相关的任何内容,据报道 Hibernate 5仍然支持此类映射

\n\n

解决方案可能是完全迁移到注释,但该组合包含十几个应用程序,其中有数十个表和总列数(在一个应用程序中)超过 1200 个。这项任务根本不切实际,尤其是因为某些应用程序正在从头开始重写为微服务。

\n\n

我的问题是我所使用的序列生成标识符的规范是否仍然受支持?

\n

AbV*_*Vog 5

我不得不深入研究 Hibernate 的源代码,发现其中一个 out: 参数sequence已重命名为sequence_name.

<param name="sequence">system_id_seq</param>
Run Code Online (Sandbox Code Playgroud)

现在必须是

<param name="sequence_name">system_id_seq</param>
Run Code Online (Sandbox Code Playgroud)

这使得有必要更新所有 hbm.xml 文件,我在 Eclipse 中使用查找和替换来完成此操作。