为什么我的 SequenceGenerator 会跳过 id 值?
P粉919464207
P粉919464207 2024-03-28 18:29:23
0
2
414

我在以下代码中设置了artistId:

@Id
    @SequenceGenerator(
            name = "artist_sequence",
            sequenceName = "artist_sequence",
            allocationSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "artist_sequence"
    )
    private Long artistId;

有人可以向我解释为什么我的 ArtistId 有时会跳过值并且乱序吗?我注意到,即使我尝试将无效的数据插入表中(抛出异常时),该数据也会被表条目拒绝,但我的artistId将被无形地填充。这使我的表格处于以下状态:

artist_id 名字 姓氏
1 马歇尔 马瑟斯
3 图帕克 沙库尔

正如我所说,我的 ArtistId 值 2 被跳过,因为我尝试插入已经存在的艺术家,但我设置它必须是唯一的。因此,异常被抛出,数据被拒绝,但我的值为 2 的 id 被以某种方式填充(或者被跳过)。你们能帮我吗,我该如何解决这个问题以避免这种情况?

P粉919464207
P粉919464207

全部回复(2)
P粉547420474

听起来您正在使用 Oracle 数据库。 ID 是在插入之前生成的,因此如果插入失败,ID 就会丢失。此外,当使用服务器集群时,ID 范围会分配给每个服务器,并且在连续插入之间可能会有很大差异。 简短的回答是,您不能依赖 ID 是连续且没有缺失值的。这很可能适用于其他数据库。

P粉898049562

这几乎是正常行为。

序列生成器的唯一职责是生成不同的整数值,仅此而已。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板