我目前正在从旧数据库中构建JPA模型,我需要一些建议。在此数据库中,从仅具有一个称为object_id的PK列的表next_id生成ID。每当Java软件使用它创建新对象时,该next_id都会递增。

我的目标是使用同一张表为JPA模型生成ID。有可能吗?我尝试使用

@GeneratedValue(strategy = GenerationType.TABLE, generator = "myGenerator")
@TableGenerator(name = "myGenerator", table = "object_id", valueColumnName = "next_id")


但是它似乎不起作用,因为object_id表只有一列(没有序列名称列)。

我有以下限制:


我之前谈到的软件将一直使用到更新
完成了。
这是一个商业软件。它的开发和使用必须继续下去。停止开发和维护它是不可能的。
此更新可能需要至少一年的时间。更新将逐步进行。数据库和用户界面将首先更新。然后将跟随计算内核。
从用户界面的单独线程中启动计算。一旦用户界面更新,将从其中调用相同的计算内核,直到该内核也被更新为止。
内核更新完成后,便可以使用另一种类型的id生成。在此之前,JPA模型中的id生成必须像软件完成的那样工作。
必须以相同的方式创建ID,以避免重复的键。
我完全知道,使用JPA从表生成ID并不是最佳选择。但这是遗留代码。我必须处理。


我忘了提到该软件的开发始于2000年。那时,还没有像Hibernate或JPA这样的工具。持久性工具是从头开始开发的,至今仍在使用。目标是摆脱它并使用更多最新技术。

有什么提示吗?提前致谢。

最佳答案

您可以使用@GenericGenerator创建自己的生成器。这样做确实使它依赖于Hibernate,但是您没有太多选择。然后自定义生成策略,以便仅使用表名。

Can @TableGenerator save the last used id in the table instead of the next available?

10-06 13:38
查看更多