Wie bekomme ich den Primärschlüsselwert in MySQL, der Hibernate verwendet?

8

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?

    
Neo 14.06.2011, 15:56
quelle

5 Antworten

10

Wenn Sie die Hibernate-Entität speichern, wird die Eigenschaft id für Sie ausgefüllt. Also wenn du

hast %Vor%

Ich mache fast immer eine assertNotNull auf die ID einer persistenten Entität in meinen Tests, um sicherzustellen, dass die Speicherung funktioniert hat.

    
hvgotcodes 14.06.2011, 16:05
quelle
2

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.

    
Mick Sear 14.06.2011 16:05
quelle
0

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.

    
Olaf 14.06.2011 16:12
quelle
0

Wenn Sie möchten, können Sie den nächsten Primärschlüssel unabhängig von einem Objekt mit:

abrufen %Vor%     
iliaden 14.06.2011 18:45
quelle
0

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

%Vor%

Und gib id

zurück     
kRIdAi uzumaki 20.08.2015 08:53
quelle

Tags und Links