我在以下代碼中設(shè)置了artistId:
@Id @SequenceGenerator( name = "artist_sequence", sequenceName = "artist_sequence", allocationSize = 1 ) @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "artist_sequence" ) private Long artistId;
有人可以向我解釋為什么我的 ArtistId 有時會跳過值并且亂序嗎?我注意到,即使我嘗試將無效的數(shù)據(jù)插入表中(拋出異常時),該數(shù)據(jù)也會被表條目拒絕,但我的artistId將被無形地填充。這使我的表格處于以下狀態(tài):
artist_id | 名字 | 姓氏 |
---|---|---|
1 | 馬歇爾 | 馬瑟斯 |
3 | 圖帕克 | 沙庫爾 |
正如我所說,我的 ArtistId 值 2 被跳過,因為我嘗試插入已經(jīng)存在的藝術(shù)家,但我設(shè)置它必須是唯一的。因此,異常被拋出,數(shù)據(jù)被拒絕,但我的值為 2 的 id 被以某種方式填充(或者被跳過)。你們能幫我嗎,我該如何解決這個問題以避免這種情況?
聽起來您正在使用 Oracle 數(shù)據(jù)庫。 ID 是在插入之前生成的,因此如果插入失敗,ID 就會丟失。此外,當使用服務(wù)器集群時,ID 范圍會分配給每個服務(wù)器,并且在連續(xù)插入之間可能會有很大差異。 簡短的回答是,您不能依賴 ID 是連續(xù)且沒有缺失值的。這很可能適用于其他數(shù)據(jù)庫。