如何使JPA序列同时使用同一DB与外部系统同步生成序列ID

问题描述

我正在使用一个序列,该序列在将记录插入数据库表时基本上生成id b / w 1000至9999。现在有一个外部遗留系统(GUI)通过手动将id b / w 1000提到9999来创建该记录。在部署我的应用程序之前,已经有一些记录如下表:

Employee Table

我已在我的实体中应用了该序列,如下所示:

@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并将其手动设置为实体时调用它

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...