Hibernate以编程方式获得递增的ID

时间:2016-06-02 03:53:13

标签: hibernate jpa

我正在使用Table Generator为所有表生成主键。最近我收到了一个要求,我需要以编程方式获取递增的id而不将实体持久化到数据库中。 我相信它可以通过调用hibernate内部API来实现。 无论如何都知道如何用hibernate以编程方式获得递增的id?

1 个答案:

答案 0 :(得分:0)

我查看了NHibernat代码(大多数情况下它适用于Hibernate)。你可以调用id生成器,但这没有多大帮助,因为在存储对象时不会使用生成的ID。

这在概念上不起作用。您不能让系统自动生成ID并同时在存储过程之外生成ID。

这些是我想到的选项:

  • 使用ID generator“已分配”并自行生成ID。这是如何分配在存储之前定义的ID的唯一方法。 (请注意,在并发事务系统中生成唯一数字并非易事。)正如您所看到的,对您的代码来说并不是很舒服。
  • 质疑要求。一旦向用户标识了一个对象,它不应该是持久的吗?
  • 考虑将可见ID与主键分开。系统中的ID只能在另一个之前定义,但是否则它会将主键与用户数据分离,这可能是一种过度的做法。由于技术原因,您可以切换到其他ID生成器,而不会与要求冲突。 (与第一项相似,但不再使用主键。)