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

How to make a JPA sequence generate sequence Id in sync with external system using same DB concurrently

提问人:Manish 提问时间:8/19/2020 更新时间:8/21/2020 访问量:393

问:

我正在使用一个序列,该序列在数据库表中插入记录时基本上生成 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,范围 (1000-9999) 中的一些 id 已经通过外部系统 GUI 插入。

如何实现当前序列,以便第一次插入记录将插入 id 1000,因为它没有被占用,但对于下一次插入将保存 id 为 1002 的记录,因为 1001 已经存在于 DB 中。

谢谢

sql-server 休眠 JPA 序列

评论


答:

0赞 JLazar0 8/21/2020 #1

请注意,id 生成器无法执行您想要的操作,您必须实现一个返回最低可用 ID 的函数,并在每次要进行插入以获取所述 ID 时调用它以手动将其设置为实体。