2009-08-21 11 views
1

ich eine Klasse wie diese haben (mit Getter und Setter, alle, die jeweils mit einer Sequenz zu Oracle DB zu überwintern abgebildet)Hibernate speichern Sequenzen ein zweites Mal bekommen

public class A{ 
     private B b; 
     private C c; 
} 

Ich erstelle dieses Objekt und Speichern Sie es in der Datenbank.

So erstelle ich eine ein Objekt aus und füllen Sie es mit einem B-Objekt und rufen

saveOrUpdate(a) 

, so kann ich erzeugt "a" und "b" Sequenzen haben. dann mache ich einige Berechnungen und erstelle eine Instanz von "C" und setze sie auf "a"

Bis hier läuft alles super. Ich muss jetzt die ID von "c" bekommen, also mache ich ein paar Checks bevor ich spüe und begehe.

Aber saveOrUpdate wird hier nicht funktionieren, da das Objekt nicht mehr vorübergehend ist. Entsprechend Hibernate Docs auf saveOrUpdate: "Wenn das Objekt in dieser Sitzung bereits persistent ist, nichts tun"

Irgendwelche Ideen?

(den Code nicht veröffentlichen kann, weil es zu lang und chaotisch, aber es ist im Grunde, dass)

Antwort

0

wenn C ein Hibernate abgebildet Klasse ist und die propery korrekt abgebildet, als erkennen winter wird, dass die Eigenschaft C hat changed wird es für Sie speichern, wenn die Sitzung gelöscht wird oder die aktive Transaktion festgeschrieben wird. Dann ist es möglich, nach dem Commit die ID von C zu erhalten.

Ein anderer Ansatz besteht darin, saveOrUpdate (c) aufzurufen. In diesem Fall erhalten Sie eine ID zugewiesen, so dass Sie es abrufen können.

Welche Überprüfungen machen Sie, dass Sie cs ID benötigen?

+0

rechts. aber ich brauche Cs ID, bevor ich spüe und begehe. und saveOrUpdate auf "a" ein zweites Mal aufrufen tut nichts, weil "a" bereits in dieser Sitzung persistent gemacht wurde, so dass es nicht einmal überprüft, ob es geändert wurde (nicht bis ich flush, was ich nicht tun kann, da DB Einschränkungen). Ich brauche cs Id, um eine URL mit dieser ID in der Querystring zu machen und es in einen Text zu schreiben, der in ein anderes Feld geht. –

+0

wll, als Sie einen saveOrUpdate (c) -Aufruf tätigen müssen, wird Hibernate eine ID zuweisen, die Sie für Ihr Textfeld verwenden können. Wenn das Feld eine Eigenschaft von c ist, wird es durch den Ruhezustand korrekt beibehalten. – Salandur

Verwandte Themen