问题描述
我正在使用一个序列,该序列在将记录插入数据库表时基本上生成id b / w 1000至9999。现在有一个外部遗留系统(GUI)通过手动将id b / w 1000提到9999来创建该记录。在部署我的应用程序之前,已经有一些记录如下表:
我已在我的实体中应用了该序列,如下所示:
@Id
@GenericGenerator(
name = "empid-sequence-generator",strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",parameters = {
@Parameter(name = "sequence_name",value = "user_sequence"),@Parameter(name = "initial_value",value = "1000"),@Parameter(name = "increment_size",value = "1")
}
)
@GeneratedValue(generator = "empid-sequence-generator")
@Column(name = "EMP_ID",nullable = false)
public short getEmp_id() {
return emp_id;
}
在当前的序列实现中,由于主键冲突,我正在获取SqlServerException,已经通过外部系统GUI插入了范围(1000-9999)中的某些ID。
我该如何实现当前序列,以便对于第一个插入记录,将插入ID为1000的记录,因为它未被占用,但是对于下一个插入记录,将存储ID为1002的记录,因为数据库中已经存在1001。
谢谢
解决方法
由于id生成器不能满足您的要求,因此您必须实现一个返回最低可用ID的函数,并在每次您要执行插入操作以获取该ID并将其手动设置为实体时调用它