我的申请表有问题。我有一个带有表序列的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;
}
}
答案 0 :(得分:0)
你可以通过
让hibernate处理这个问题GenerationType.SEQUENCE
您可以在此处阅读更多相关信息https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing
您正在使用ORACLE,因此Oracle {/ p>不支持您GenerationType.IDENTITY
{{1}}