在hibernate保存对象之前从序列中获取生成的id

时间:2014-12-15 17:25:40

标签: java hibernate postgresql jpa orm

如何在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'),我有什么方法可以做到这一点吗?

由于

1 个答案:

答案 0 :(得分:5)

使用JPA @SequenceGenerator以及旧版Hibernate标识符,无论如何都会为SequenceHiLoGenerator提供HI/LO optimization algorithm

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

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

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