我有一个标准的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!?
难倒,任何帮助表示赞赏!
感谢, 达明
答案 0 :(得分:0)
Hibernate, @SequenceGenerator and allocationSize回答了这个问题。
也就是说,如果JPA定义的allocationSize与oracle序列增量大小不同,则会发生不好的事情。
对我来说: JPA allocationSize = 10 DB序列增量= 1
Java持久性然后乘以oracle序列* 10