如何通过遗留映射在 Hibernate 5 中指定基于序列的生成值
How to specify a sequence-based generated value in Hibernate 5 via legacy mapping
我有一个问题与 this question 类似,但方式略有不同,所以完全不同。
我的问题是我正在将项目组合从 Java 8/Hibernate 4.x 堆栈迁移到 Java 11/Hibernate 5.4 堆栈。
在第二种情况下,我在应用程序尝试保存对象时立即收到此错误:
org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist
我上面提到的另一个问题的答案提供了一些见解,但我仍然不明白为什么会出现这个错误:我们所有的实体都在使用每个自己的序列,并且序列在相应的 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="…" 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" />
…
</class>
</hibernate-mapping>
似乎忽略了序列规范。我用 XML 查找了一些遗留 Hibernate 映射的文档,但我找不到与 Hibernate 5 相关的任何内容,据说 .
一个解决方案可能是完全迁移到注释,但该组合包含十几个应用程序,这些应用程序具有数十个表和总数量(在一个应用程序中)超过 1200 列。这项任务根本不切实际,所有更多的是因为一些应用程序正在从头开始重写为微服务。
我的问题是是否仍然支持我所使用的序列生成标识符的规范?
我不得不深入研究 Hibernate 的源代码才发现其中一个:参数 sequence
已重命名为 sequence_name
.
<param name="sequence">system_id_seq</param>
现在必须是
<param name="sequence_name">system_id_seq</param>
这使得有必要更新所有 hbm.xml 个文件,这是我在 Eclipse 中使用查找和替换完成的。
我有一个问题与 this question 类似,但方式略有不同,所以完全不同。
我的问题是我正在将项目组合从 Java 8/Hibernate 4.x 堆栈迁移到 Java 11/Hibernate 5.4 堆栈。
在第二种情况下,我在应用程序尝试保存对象时立即收到此错误:
org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist
我上面提到的另一个问题的答案提供了一些见解,但我仍然不明白为什么会出现这个错误:我们所有的实体都在使用每个自己的序列,并且序列在相应的 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="…" 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" />
…
</class>
</hibernate-mapping>
似乎忽略了序列规范。我用 XML 查找了一些遗留 Hibernate 映射的文档,但我找不到与 Hibernate 5 相关的任何内容,据说
一个解决方案可能是完全迁移到注释,但该组合包含十几个应用程序,这些应用程序具有数十个表和总数量(在一个应用程序中)超过 1200 列。这项任务根本不切实际,所有更多的是因为一些应用程序正在从头开始重写为微服务。
我的问题是是否仍然支持我所使用的序列生成标识符的规范?
我不得不深入研究 Hibernate 的源代码才发现其中一个:参数 sequence
已重命名为 sequence_name
.
<param name="sequence">system_id_seq</param>
现在必须是
<param name="sequence_name">system_id_seq</param>
这使得有必要更新所有 hbm.xml 个文件,这是我在 Eclipse 中使用查找和替换完成的。