Wie kann ich get last inserted id mit Hibernate
Möchte ich für das abrufen der zuletzt eingefügten Wert der id in den Ruhezustand versetzt werden.
Suche nach:
Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Aber der folgende code gibt mir diese Fehlermeldung:
java.lang.Classcastexception-Fehler: java.math.BigInteger nicht cast auf java.lang.Lange
Bitte teilen Sie Ihre Gedanken!
Lösung
Long lastId = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Vergessen Sie nicht, zu importieren:
import java.math.BigInteger;
- Geist teilen, was Sie tun werden, mit dieser ID? Sobald Sie Holen die lastID es ist schon veraltet; jedes andere system, user/thread aktualisieren, damit Sie in den Zeitrahmen, dass Ihre lastId variable im Gültigkeitsbereich befindet.
- Ich habe zu speichern, die id einer anderen Tabelle als foreign key id. Gibt es eine bessere Lösung für diese situation?
- Ja: verwenden JPA richtig. Beim einfügen einer Entität, die IDS werden in die Objekt-Instanz nach anhaltenden es. Holen Sie sich die ID von dem Objekt selbst, um sicherzustellen, dass Sie die korrekte ID. Ist diese für Prüfzwecke oder so?
- Uh bin ich davon ausgegangen, JPA, aber das gleiche gilt, wenn Sie mit der Hibernate-API direkt.
- Get last inserted Id sehr einfach mit diesem stackoverflow.com/questions/25561681/...
- Danke. Diese Lösung funktioniert gut für Hibernate 4 auf MySql 5.6. Hier ist mein code:
int postID = Math.toIntExact(((BigInteger) getSession().createNativeQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue());
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehler ist ziemlich klar. Es ist die Rückkehr
BigInteger
und nichtlong
Ordnen Sie es zu einem
BigInteger
. Und bekommenlongValue()
von ihm.Können Sie einfach speichern Sie die gibt ein Serialisiertes Objekt, das ist eigentlich die Letzte insert-id.
Beispiel-code:
Einen Testlauf gestartet:
und hier ist die Ausgabe:
Da der Rückgabetyp von
uniqueResult()
istBigInteger
und nichtLong
Sie sollten es so machen:Die Methode
uniqueResult()
gibt nur ein BigInteger, weil Sie Ihre AbfrageSELECT LAST_INSERT_ID()
.