【问题标题】:Get generated id from a sequence before hibernate saves the object在hibernate保存对象之前从序列中获取生成的id
【发布时间】:2015-02-13 21:02:22
【问题描述】:

如何在 hibernate 保存对象之前获取生成的对象 ID。代码如下:

@Id
@SequenceGenerator(name="MY_SEQ", sequenceName="MY_SEQ", allocationSize=1 )
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="MY_SEQ")
private long id;

有什么方法可以在不使用 currval('MY_SEQ') 上的选择的情况下做到这一点?

谢谢

【问题讨论】:

  • 你试过 session.persist() 吗? persist 会将对象放入会话中,但尚未将其保存到数据库中,因此,它很有可能会为您生成序列。
  • 我会收回我的答案..坚持不会立即给你生成的ID stackoverflow.com/a/5862722/258741

标签: java hibernate postgresql jpa orm


【解决方案1】:

将 JPA @SequenceGenerator 与旧版 Hibernate 标识符一起使用将为您提供 SequenceHiLoGenerator,无论如何都会应用 HI/LO optimization algorithm

但对于序列,实际标识符值应用during flush-time,因此在会话被刷新(手动刷新或提交时刷新)之前您不会获得实际值。

对于 IDENITY 生成器,您会获得在刷新之前生成的标识符,但这会禁用 JDBC 批处理,因此它也不是灵丹妙药。

如果您想要完全控制,您需要使用分配的标识符,UUID surrogate keys 非常适合这项工作。

【讨论】:

  • 谢谢,回答了我的问题。
猜你喜欢
  • 2016-09-17
  • 2010-12-27
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多