如何从只有一列

时间:2017-08-30 14:51:26

标签: java hibernate jpa

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

我的目标是使用相同的表格为JPA模型生成ID。有可能吗?我试着用

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

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

我有以下限制:

  1. 我之前谈过的软件将在更新前使用 完成了。
  2. 这是一款商业软件。它的开发和使用必须继续。停止开发和维护它是不可能的。
  3. 此更新可能至少需要一年时间。更新将逐步完成。数据库和用户界面将首先更新。然后是计算内核。
  4. 计算是从用户界面在单独的线程中启动的。更新用户界面后,将从中调用相同的计算内核,直到内核也更新为止。
  5. 内核更新完成后,就可以使用其他类型的id生成。在此之前,JPA模型中的id生成必须像软件所做的那样工作。
  6. 必须以相同的方式创建ID以避免重复键。
  7. 我完全清楚使用JPA表生成ID并不是最好的选择。但这是遗留代码。我必须处理它。
  8. 我忘了提到这个软件的开发始于2000年。当时,没有像Hibernate或JPA这样的工具。持久性工具是从头开发的,至今仍在使用。目标是摆脱它并使用更新的技术。

    任何提示?提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我们遇到这样的情况:我们必须维护遗留系统插入记录,并构建一个将记录插入同一个表的新系统,并希望为新系统使用序列生成器。我们刚刚使新的序列生成器生成负数,这样两者之间就不会发生冲突。可能是你的选择吗?