【问题标题】:How to get the correct ID after saving a Hibernate object?保存 Hibernate 对象后如何获取正确的 ID?
【发布时间】:2017-12-11 11:17:13
【问题描述】:

我正在使用 Hibernate 和 Oracle。我想保存一个对象并获取它的 ID,它是由使用序列的触发器生成的。 (使用触发器是一个要求。)有两种方法可以获取我目前可以使用的 ID:1)找到 ID 列的最大值; 2) 找到序列的当前值。两种方法都存在相同的问题,即在保存此对象和获取 ID 之间可能会发生另一次插入。 如何避免此类不合时宜的插入?

此外,这两个事件发生在获取 ID 后不会结束的事务中。换句话说,之后会有事情发生。因此,如果我锁定表,则在事务结束之前不会释放锁定。这是不可接受的。

【问题讨论】:

    标签: oracle hibernate insert


    【解决方案1】:

    如果您为您的实体使用序列 id generation strategy,您应该通过以下方式解决此问题:

    1)您可以指定allocationSize,它将预先为您分配一定数量的ID,并在特定交易中可供您使用。

    2) 一旦您调用session.save(entity)entityManager.persist(entity),ID 将在调用后立即提供给您,无需等到事务方法结束和实际的flushcommit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多