SequenceGenerator不使用databasesequence的下一个值

时间:2017-07-24 10:11:24

标签: oracle hibernate sequence

我的申请表有问题。我有一个带有表序列的Oracle数据库。当我在数据库中查看序列时,它表示last_number是33800.但是,当我尝试从我的应用程序插入一个新对象时,生成的id不是33800,而是一个较小的数字。我的猜测是Hibernate或其他只是找到下一个可用的数字。确实发生了我的应用程序删除表中的行,从而导致id序列中的漏洞。所以,最终我会得到一个例外,因为我试图插入的ID已被使用。

如何配置应用程序,使其始终是序列的最后一个数字+ 1?我认为这是默认行为,因为我不记得遇到这个问题。

这是我的实体: @Entity @SequenceGenerator(name = "SequenceIdGenerator", sequenceName = "MY_SEQ", allocationSize = 20) @Table(name = "myEntity") public class myEntity { private Long id; @Id @Column(name = "id") @GeneratedValue(generator = "SequenceIdGenerator") public Long getId() { return id; } public void setId(final Long id) { this.id = id; } }

1 个答案:

答案 0 :(得分:0)

你可以通过

让hibernate处理这个问题
GenerationType.SEQUENCE

您可以在此处阅读更多相关信息https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

您正在使用ORACLE,因此Oracle {/ p>不支持您GenerationType.IDENTITY {{1}}