0

我想知道在什么时候将对象的 ID 设置为(oracle)数据库中声明的序列的下一个值。

这是代码:

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SEQ_A")
@SequenceGenerator(name="SEQ_A", sequenceName = "SEQ_A_ID")
4

1 回答 1

0

拥有序列时,JPA 会在您调用 EntityManager 实例的 persist 方法后准确设置 id。无需提交刷新。该 ID 恰好在该呼叫之后可用。
这是 GenerationType.SEQUENCE 和 .IDENTITY 之间的主要区别。后者在联系db后提供id,而SEQUENCE直接设置,因为应用程序运行时预先加载了一组id,因此不需要与db交互来获取id。

不同实现对 JPA 协议的解释:
“与 AUTO 和 IDENTITY 不同,SEQUENCE 策略会在新实体对象被持久化后(即在提交之前)立即生成一个自动值。当更早需要主键值时,这可能很有用。为了尽量减少到数据库服务器的往返次数,ID 是分组分配的。每个分配中的 ID 数量由 allocationSize 属性指定。给定分配中的某些 ID 可能不会被使用。因此,此策略不保证序列值不会有空缺。” http://www.objectdb.com/java/jpa/entity/generated

于 2013-09-07T19:36:12.237 回答