Warum JPA persist () keine primäre ID für die automatische Erhöhung generiert?

7

Ich verwende JPA toplink-essential und SQL Server 2008

Mein Ziel ist es, den Primärschlüsselwert der Daten zu erhalten, die in die Tabelle eingefügt werden. Ich weiß in JDBC, gibt es GetInsertedId () wie Methode, die Ihnen die ID der Auto-Inkrement-Primär-ID geben (aber das ist nach der Insert-Anweisung ausgeführt)

In JPA habe ich herausgefunden, dass @GenratedValue annotation den Trick machen kann.

%Vor%

Wenn ich jetzt den Code unten ausführe, sollte er mir die automatisch inkrementierte ID geben, aber er gibt NULL zurück ...

%Vor%     
masato-san 02.02.2011, 04:46
quelle

3 Antworten

2

Wir verwenden auch SQL Server 2008 und es funktionierte nie für mich, daher führe ich immer die separate Abfrage "SELECT @@IDENTY" aus, um die eingefügte ID zu erhalten.

Der Grund, den ich im Internet gefunden habe, war, dass die Auto-ID (IDENTITY) von der Datenbank verwaltet und nie in Entity abgerufen wird, solange Sie die Zeile nicht committen oder die Informationen manuell aus der Datenbank abrufen.

    
JSS 02.02.2011, 09:31
quelle
11

Das Problem ist, dass Sie die IDENTITY-ID-Generierung verwenden. Die IDENTITY-ID-Generierung kann keine Vorbelegung vornehmen, da sie das INSERT zum Generieren der ID benötigt. TABELLE und SEQUENZ ID Generation Unterstützung Vorallokation, und ich würde immer empfehlen die Verwendung dieser, und nie IDENTITY wegen dieses Problems und wegen der Leistung.

Sie können die ID auslösen, die bei der IDENTITY-ID-Generierung generiert wird, indem Sie flush () aufrufen.

    
James 02.02.2011 15:16
quelle
6

mach einfach das:

%Vor%

Nach dem Aktualisieren der Entität haben Sie das ID-Feld mit dem richtigen Wert.

    
Heidarzadeh 18.07.2012 06:05
quelle

Tags und Links