Ich verwende Hibernate, um auf MySQL zuzugreifen, und ich habe eine Tabelle mit einem Autoinkrement-Primärschlüssel.
Jedes Mal, wenn ich eine Zeile in die Tabelle einfüge, muss ich den Primärschlüssel nicht angeben. Aber wie kann ich nach dem Einfügen einer neuen Zeile den relativen Primärschlüssel sofort mit Hibernate abrufen?
Oder kann ich einfach jdbc dazu verwenden?
Wenn Sie die Hibernate-Entität speichern, wird die Eigenschaft id
für Sie ausgefüllt. Also wenn du
Ich mache fast immer eine assertNotNull
auf die ID einer persistenten Entität in meinen Tests, um sicherzustellen, dass die Speicherung funktioniert hat.
Sobald Sie das Objekt beibehalten haben, sollten Sie in der Lage sein, getId () oder was auch immer Ihre @ ID-Spalte ist aufzurufen, so dass Sie das von Ihrer Methode zurückgeben können. Sie können den Hibernate-Cache der ersten Ebene auch ungültig machen und erneut abrufen.
Aus Gründen der Portabilität sollten Sie sich jedoch die Verwendung von Hibernate mit der Generierung von Sequenzstil-IDs ansehen. Dies wird den Übergang von MySQL bei Bedarf erleichtern. Sicher, wenn Sie diesen Generator-Stil verwenden, können Sie die ID sofort abrufen, da Hibernate den Spaltenwert auflösen muss, bevor das Objekt erhalten bleibt:
%Vor%Es ist ein bisschen komplexer, aber es ist die Art von Dingen, die Sie ausschneiden und einfügen können, abgesehen von der Änderung des SEQUENCE-Namens.
Wenn Sie eine save () -Methode in Hibernate aufrufen, wird das Objekt nicht sofort in die Datenbank geschrieben. Es kommt entweder vor, wenn Sie versuchen, aus der Datenbank zu lesen (aus der gleichen Tabelle?) Oder explizit flush () aufrufen. Bis der entsprechende Datensatz nicht in die Datenbanktabelle eingefügt wird, würde MySQL keine ID dafür vergeben.
Also ist die ID verfügbar, aber nicht bevor Hibernate den Datensatz tatsächlich in die MySQL-Tabelle einfügt.
Nun, im Fall der Autoinkrement-Generatorklasse, wenn wir die save()
-Methode verwenden, gibt sie den Primärschlüssel zurück (unter der Annahme, dass id
ist). Also gibt es das bestimmte id
zurück, also kannst du das tun
Und gib id
Tags und Links mysql hibernate auto-increment