我在以下程式碼中設定了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 被以某種方式填充(或被跳過)。你們能幫我嗎,我該如何解決這個問題以避免這種情況?
聽起來您正在使用 Oracle 資料庫。 ID 是在插入之前產生的,因此如果插入失敗,ID 就會遺失。此外,當使用伺服器叢集時,ID 範圍會分配給每個伺服器,並且在連續插入之間可能會有很大差異。 簡短的回答是,您不能依賴 ID 是連續且沒有缺失值的。這很可能適用於其他資料庫。
這幾乎是正常行為。
序列產生器的唯一職責是產生不同的整數值,僅此而已。