如何生成考虑已删除实体的序列 [duplicate]

How to generate a sequence considering deleted entities [duplicate]

提问人:יהונתן בן דוד 提问时间:8/25/2020 最后编辑:Mark Rotteveelיהונתן בן דוד 更新时间:8/26/2020 访问量:135

问:

假设我有一个简单的休眠实体,就像这样

@Entity
public class SomeEntity {
    @Id
    private long id;

    // Other fields...
}

我想为 id 列生成序列,同时考虑任何已删除的实体。这意味着我不希望为保存到数据库的每个新实体增加序列,而是重用分配给已删除实体的值。 例如,在数据库中,我保存了这些实体

|---------------------|
|          ID         |
|---------------------|
|          1          |
|---------------------|
|          2          |
|---------------------|

因此,下一个实体 id 应获取值 3。但是,如果删除了 id 为“1”的实体,下次我将实体保存到数据库时,我希望其 id 为 '1'

如何使用 Hibernate 实现此行为?

Java 休眠 JPA 序列

评论

3赞 SternK 8/25/2020
你能解释一下你为什么需要它吗?
0赞 SternK 8/25/2020
我想这个问题应该更多地针对基础数据库。例如,请参阅问题
3赞 Nowhere Man 8/25/2020
这回答了你的问题吗?JPA,已删除 ID 的重用还是这个?Hibernate@GeneratedValue,如何处理已删除的行。 在MySQL中

答:

0赞 JLazar0 8/25/2020 #1

最后,数据库序列不能以这种方式工作。您必须实现数据库查询以获取最小可用 ID 并手动设置实体 ID。

评论

2赞 Mark Rotteveel 8/26/2020
这样做会导致各种令人讨厌的并发问题,这正是序列不这样做的原因。
0赞 יהונתן בן דוד 8/26/2020
谢谢。我还阅读了 Alex Rudenko 建议的答案,基本上说它也可能导致性能问题