Wie man die auto-increment primary key-Wert in MySQL mit Hibernate
Ich bin mit Hibernate-Zugriff auf MySQL, und ich habe eine Tabelle mit einem auto-increment Primärschlüssel.
Jedesmal, wenn ich eine Zeile einfügen in die Tabelle muss ich nicht angeben, die Primärschlüssel. Aber nachdem ich eine neue Zeile einfügen, wie bekomme ich die relative Primärschlüssel sofort mit hibernate?
Oder kann ich einfach jdbc, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim speichern der hibernate-Entität, die
id
Eigenschaft wird für Sie aufgefüllt werden. Also, wenn SieIch eigentlich fast immer ein
assertNotNull
auf die id des persistierten entity in meinen tests, um sicherzustellen, dass das speichern funktioniert.Sobald Sie verharrte das Objekt, Sie sollten in der Lage sein zu rufen getId() oder was auch immer Ihr @ID-Spalte ist, so dass Sie zurückkehren konnten, dass von Ihrer Methode. Sie könnten auch zum erlöschen der Hibernate-erste-level-cache und Hole ihn wieder.
Jedoch für die Portabilität, vielleicht möchten Sie sich bei der Verwendung von Hibernate mit Sequenz-Stil-ID-Generierung. Dies erleichtert den übergang Weg von MySQL wenn Sie jemals brauchen, um. Sicherlich, wenn Sie diese Art von generator Sie werden in der Lage sein, um die ID sofort, weil Ruhezustand braucht, um zu beheben, den Wert in der Spalte, bevor er weiterhin das Objekt:
Es ist ein bisschen komplexer, aber es ist die Art von Sache, die Sie können Ausschneiden und einfügen, abgesehen vom ändern der name der SEQUENZ.
Wenn Sie anrufen, eine save() Methode im Ruhezustand, wird das Objekt nicht in die Datenbank geschrieben sofort. Es tritt entweder, wenn Sie versuchen zu Lesen aus der Datenbank (aus der gleichen Tabelle?) oder der explizite Aufruf von flush(). Bis der entsprechende Datensatz nicht in die Datenbank eingefügt Tabelle, MySQL würde nicht weisen Sie eine id für Sie.
So, die id verfügbar ist, aber nicht, bevor der Ruhezustand tatsächlich fügt den Datensatz in der MySQL-Tabelle.
Wenn Sie möchten, können Sie sich den nächsten Primärschlüssel unabhängig von einem Objekt verwenden:
Sowie im Falle von auto-Inkrement-generator Klasse, wenn wir den
save()
Methode gibt es den primary key (vorausgesetzt, Ihreid
). So gibt es, dass insbesondereid
, so können Sie dies tunUnd zurück
id