Ich habe die artistId im folgenden Code festgelegt:
@Id @SequenceGenerator( name = "artist_sequence", sequenceName = "artist_sequence", allocationSize = 1 ) @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "artist_sequence" ) private Long artistId;
Kann mir jemand erklären, warum meine ArtistId manchmal Werte überspringt und außer Betrieb gerät? Mir ist aufgefallen, dass selbst wenn ich versuche, ungültige Daten in die Tabelle einzufügen (wenn die Ausnahme ausgelöst wird), die Daten vom Tabelleneintrag abgelehnt werden, meine artistId jedoch unsichtbar aufgefüllt wird. Dadurch befindet sich mein Tisch im folgenden Zustand:
Künstler_ID | Name | Nachname |
---|---|---|
1 | Marshall | Mathematik |
3 | Tupac | Shakur |
Wie gesagt, mein ArtistId-Wert von 2 wurde übersprungen, weil ich versucht habe, einen bereits vorhandenen Künstler einzufügen, aber ich habe ihn so eingestellt, dass er eindeutig sein muss. Also wird die Ausnahme ausgelöst, die Daten werden abgelehnt, aber meine ID mit dem Wert 2 wird irgendwie gefüllt (oder übersprungen). Könnt ihr mir helfen, wie kann ich dieses Problem lösen, um diese Situation zu vermeiden?
听起来您正在使用 Oracle 数据库。 ID 是在插入之前生成的,因此如果插入失败,ID 就会丢失。此外,当使用服务器集群时,ID 范围会分配给每个服务器,并且在连续插入之间可能会有很大差异。 简短的回答是,您不能依赖 ID 是连续且没有缺失值的。这很可能适用于其他数据库。
这几乎是正常行为。
序列生成器的唯一职责是生成不同的整数值,仅此而已。