首頁  >  問答  >  主體

為什麼我的 SequenceGenerator 會跳過 id 值?

我在以下程式碼中設定了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粉919464207P粉919464207204 天前360

全部回覆(2)我來回復

  • P粉547420474

    P粉5474204742024-03-29 16:10:10

    聽起來您正在使用 Oracle 資料庫。 ID 是在插入之前產生的,因此如果插入失敗,ID 就會遺失。此外,當使用伺服器叢集時,ID 範圍會分配給每個伺服器,並且在連續插入之間可能會有很大差異。 簡短的回答是,您不能依賴 ID 是連續且沒有缺失值的。這很可能適用於其他資料庫。

    回覆
    0
  • P粉898049562

    P粉8980495622024-03-29 13:28:53

    這幾乎是正常行為。

    序列產生器的唯一職責是產生不同的整數值,僅此而已。

    回覆
    0
  • 取消回覆