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

标签 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') 上的选择的情况下做到这一点?

谢谢

最佳答案

使用 JPA @SequenceGenerator 以及遗留的 Hibernate 标识符将为您提供 SequenceHiLoGenerator适用于 HI/LO optimization algorithm无论如何。

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

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

如果你想要完全控制,你需要求助于分配的标识符和UUID surrogate keys非常适合这份工作。

关于java - 在 hibernate 保存对象之前从序列中获取生成的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489595/

相关文章:

java - OracleDataSource.getConnection 是线程安全的吗?

Java Spring 与 Spring Security 的依赖版本冲突

sql - 将文本转换为带时区的时间

postgresql - View 中的 pg_dump 在 postgresql 10 中没有数据

java - XMLHttpRequest 错误 请求的资源上不存在 'Access-Control-Allow-Origin' header

java - 如何从文本文件中挑选出单独的数字?

java - 用 Java 编写通用迭代器

java - JPA不保存带有@Transactional注释的选择结果

java - 使用 View 作为与 Hibernate 的连接表

JAVA JPA 列表受其他列表影响