2017-07-27 2 views
0

Ich verwende eine Id Auto GeneratedType SequenzSequence Erzeugungsart Ausgabe SQL JPA

@GeneratedValue(strategy = GenerationType.SEQUENCE) 

ich die folgenden Werte für die Id-Spalte in der Tabelle habe

180 
181 
182 
200 
230 

Aber meine Sequenz scheint zu sein, Inkrementieren von 180,181 and 183 Sequenz, obwohl ich bereits 200 and 230 in der Tabelle haben

Und allmählich erreicht die Sequenz 200 und ich bekomme eine eindeutige Schlüssel Ausnahme .

Gibt es eine Möglichkeit, den GenerationType so zu verwalten, dass er basierend auf dem größten in der Spalte verfügbaren Wert erhöht wird.

How can I make the next increment to be 231 instead of 184?. 

Antwort

0

Sie können den Anfangswert der Sequenz mithilfe der initialValue-Eigenschaft festlegen.

@SequenceGenerator(name = "TABLE1_SEQ", sequenceName = "TABLE1_SEQ", initialValue = 231) 
@GeneratedValue(generator = "TABLE1_SEQ") 

Wenn die Werte zu Ihrer Tabelle hinzugefügt werden von außerhalb der JPA-Anwendung idealerweise die gleiche Sequenz (oder was auch immer Erzeugungsstrategie Sie verwenden) aus der Datenbank, so dass die Sequenz zu dem neusten Stand bleibt.

Sie können auch den Tabellengenerator oder die Identitätsgenerierung verwenden, wenn es Ihnen besser passt.

Sie können auch ein SQL-Skript verwenden, um die Sequenz direkt in der Datenbank zu aktualisieren. Wenn Sie jedoch gleichzeitig die gleiche Tabelle außerhalb von JPA aktualisieren, gibt es keine direkte Möglichkeit, JPA mitzuteilen, immer die maximale ID zu verwenden.

+0

Was ist der Zweck von Tabellengenerator oder Identity Generator –

+0

Sie sind andere Arten von Strategien zur Verfügung (wie Sequenzen). Sie können eine basierend auf Ihrem Datenbanksystem auswählen. Der Grund, warum ich sie erwähnte, ist, dass die IDs 200 und 230 außerhalb der JPA-Anwendung erstellt wurden, ohne die Reihenfolge zu verwenden, dh eine andere Art der ID-Generierung. Daher wäre es am besten, Ihre JPA-Anwendung mit derselben ID zu synchronisieren Generierungsstrategie, die außerhalb von JPA verwendet wird, oder Sie werden in Situationen wie dem, was Sie gerade erleben, landen. Ändern Sie kurz Ihren JPA-Anwendungscode oder Ihren Nicht-JPA-Anwendungscode, damit sie miteinander übereinstimmen. – Ranjeet