Ich muss die ID abrufen, die eine Datenbank nach einer persist()
generiert. Meine Einheit sieht wie folgt aus:Datenbank-generierte ID nach persistieren in Hibernate erhalten
@Entity
@Table(name = "TableName")
public class TableNameClass {
@Id
@Generated(GenerationTime.INSERT)
@Column(name = "ID", insertable = false, nullable = false, unique = true, updatable = false)
private int ID;
...
}
Wenn jedoch das nächste Stück Code ausgeführt wird, wird das Unternehmen in der DB gespeichert, aber das Ergebnis der System.out.println
0:
Session s = HibernateUtil.getSessionFactory().openSession();
TableNameClass tnc = new TableNameClass();
tnc.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(tnc);
t.commit();
System.out.println(tnc.getID());
s.close();
mir jemand helfen könnte, , Bitte?
PD: Ich interessiere mich nicht für die Verwendung von Session oder EntityManager, so dass eine Lösung auf einem von ihnen in Ordnung sein wird.
EDIT:
Ich habe versucht, das Hinzufügen eines flush()
nach dem save()
Methode, aber immer noch nicht funktioniert:
Session s = HibernateUtil.getSessionFactory().openSession();
AlertType at = new AlertType();
at.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(at);
s.flush();
t.commit();
System.out.println(at.getID());
s.close();
Ich habe auch versucht, das Hinzufügen von flush()
Funktion nach dem commit()
jedoch Es wird eine Ausnahme ausgelöst, die besagt, dass keine Transaktion aktiv ist.
Funktioniert immer noch nicht. Ich habe die Frage mit den Änderungen aktualisiert, die ich vorgenommen habe. Irgendeine Idee? Ich verwende Hibernate 5.2.4 Final –
Das Commit schloss die Transaktion und wird nicht benötigt, wenn Sie CMP verwenden. Nimm das raus und schau, ob es funktioniert. – WPrecht
Funktioniert immer noch nicht. Ich habe die persist() entfernt, aber immer noch 0 zurück. Ich habe auch versucht, indem Sie die Entität ohne eine Transaktion speichern, nach diesem Tutorial [link] (http://www.journaldev.com/3481/hibernate-session-merge -vs-update-save-saveorupdate-persist-Beispiel) und die Auto-Commit-Eigenschaft aktivieren, aber ich denke, das funktioniert nicht mehr auf der neuesten Version von Hibernate. –