0
@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGen")
    @SequenceGenerator(name = "seqGen", sequenceName = "seq", initialValue = 1)
    private Long id;

基本上,我有三个实体(同时获取)在我的数据库中共享相同的序列名称。我知道出于性能目的,最好对每个带有 SequenceGenerator 的实体使用相同的选项卡。

有时,在获取大量数据时,我会遇到重复条目错误,并且基本上更改序列的 next_val 可以暂时解决问题。我想知道 SequenceGenerator 如何更好地工作以及是否有解决此问题的方法?

编辑:你能更好地解释一下序列的目的是什么以及他的算法是如何工作的吗?

编辑 2:在帖子中,我看到了这条评论:

“假设您创建的序列对象在 Microsoft SQL Server 2012 或 SQL Server 2014 中启用了 CACHE 选项。当实例处于内存压力下,并且多个并发连接从同一序列对象请求序列值时,可能会出现重复的序列值生成。此外,将重复序列值插入表时会发生唯一或主键 (PK) 冲突错误。

我当前的问题有链接吗?

4

1 回答 1

0

没有序列算法,它类似于自动增量+1,也与获取具有重复条目的数据无关。重复条目仅意味着您的数据库或代码的结构不好,这会导致数据一开始就被复制。

世代类型。IDENTITY - 在身份中,数据库负责自动生成主键。在不指定 ID 值的情况下插入一行,插入行后,向数据库询问最后生成的 ID。Oracle 11g 不支持身份密钥生成器。Oracle 12c 支持此功能。

世代类型。SEQUENCE - 按顺序,我们首先向数据库询问下一组序列,然后插入一行返回序列 id。

https://www.baeldung.com/hibernate-identifiers

于 2021-12-07T11:38:59.780 回答