Oracle如何/在何处设置/存储@SequenceGenerator值

时间:2016-12-08 19:11:56

标签: java oracle jpa

我有一个标准的JPA @SequenceGenerator注释实体:

@Id
@Column(name = "ID", unique = true, nullable = false)
@GeneratedValue(generator = "mySeq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "mySeq", sequenceName = "MY_SEQ", allocationSize = 10)  
private long id;

将命名的Oracle Sequence定义为:

CREATE SEQUENCE MY_SEQ
 START WITH 55554444
 INCREMENT BY 1
 NOORDER NOCYCLE;

当我坚持使用标准Java Spring Data Service时,第一个持久生成的ID值为:

555544440

换句话说,它是我定义为起始值的* 10。 这是预期的行为吗?

当我查询时:

select last_number from dba_sequences

但是,返回的值仍然是55554444范围。

直接在DB上运行等效插入

INSERT INTO MY_TABLE (ID) VALUES (MY_SEQ.nextVal)

生成并保持ID值,正如我所料;即55554444,55554445,55554446等(并且还关联dba_sequences中的last_number)

怎么回事!如何以及为什么JPA持久性* 10我的序列ID!?

难倒,任何帮助表示赞赏!

感谢, 达明

1 个答案:

答案 0 :(得分:0)

Hibernate, @SequenceGenerator and allocationSize回答了这个问题。

也就是说,如果JPA定义的allocationSize与oracle序列增量大小不同,则会发生不好的事情。

对我来说: JPA allocationSize = 10 DB序列增量= 1

Java持久性然后乘以oracle序列* 10