2009-05-26 15 views
15

Hibernate unterstützt keine "delete-orphan" -Kaskadierung von Eins-zu-Eins- oder Viele-zu-Eins-Beziehungen. Ich habe das erst kürzlich entdeckt und es bereitet mir ernsthafte Kopfschmerzen. Ich habe ein paar Klassen in meinem Modell, die so entworfen wurden, dass das Kind außerhalb des Elternteils keine wirkliche Weltbedeutung hat. Ich habe nur ein DAO für das Elternteil und nicht ein separates DAO für die Kindklasse.Problemumgehungen für Hibernate's Mangel an Delete-Orphan-Unterstützung für Eins-zu-Eins und Viele-zu-Eins-Beziehungen?

Dies funktioniert:

parent.getChild().setProperty("something"); 
parentDao.save(parent); 

Das hat nichts tun:

parent.setChild(null); 
parentDao.save(parent); 

Dies ist sehr bedauerlich, denn jetzt muss ich meine DAO Schicht und einige der Operationen meines Dienstes überdenken Schicht.

Hat jemand diese Einschränkung in eleganter Weise bearbeitet? Ich möchte mich wirklich nur mit persistierenden Elternobjekten befassen. In diesem speziellen Fall gibt es keinen Grund, sich mit der Kinderpersistenz zu befassen, außer um Hibernate glücklich zu machen, und nur im Falle des Löschens von Kindern.

Antwort

4

Es scheint ein Unentschieden zurück im Rahmen werden sie richten, die hoffentlich bald

http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608

Das Ticket im Jahr 2007 und die letzten Beitrag beschwerte sich über das Problem war so aktuell wie vor einem Monat eröffnet .

Was ich mache, ist eine Eigenschaft auf meinem Objekt namens isMarkedForDeletion setzen. Und wenn das wahr ist, habe ich meinen Dao oder meinen Dienst ausdrücklich löschen lassen. Es ist definitiv NICHT so gut wie delete-orphan wäre, aber es funktioniert gut genug im Frühjahr + Winterschlaf-Framework.

Ich werde diesen Beitrag im Auge behalten, da dies eine SEHR wichtige Frage ist.

+0

Es scheint es vor etwa einem Jahr beschlossen wurde - http://opensource.atlassian.com/projects/hibernate/browse/HHH-4726 –

+1

@Savannah: Es sieht so aus, als ob 'delete-orphan' für' 'unterstützt wird, falls die Beziehung nicht' constrained' ist (siehe http://docs.jboss.org/hibernate /core/3.6/reference/en-US/html/mapping.html#onetoone4). Ich kann das mir selbst kaum erklären, da Eins-zu-eins immer eine referentielle Schlüsseleinschränkung hat. –

3

Die hier beschriebene Problemumgehung https://forum.hibernate.org/viewtopic.php?p=2379216 funktionierte für mich. Es verwendet die @ OneToMany-Verknüpfung mit einem einzelnen Element auf der Seite "viele", um eine @ OneToOne-Verknüpfung zu implementieren und das Remove-Orphans-Problem zu lösen.

-1

Datenbank auf Update-Trigger in untergeordneten Tabelle schreiben. Wenn übergeordneten Schlüssel null ist, um die Aufzeichnung von Kind löschen

+0

können Sie der Antwort noch mehr hinzufügen –

Verwandte Themen