我想知道在什么时候确切地将对象的Id设置为(oracle)数据库中声明的序列的下一个值。
以下是代码:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SEQ_A")
@SequenceGenerator(name="SEQ_A", sequenceName = "SEQ_A_ID")
感谢。
答案 0 :(得分: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