[Hibernate] @OneToOne: Löschen einer referenzierten Instanz

turmaline

Bekanntes Mitglied
Hallo Leute,

ich habe folgendes Schema:

A -> B (1:n)

B -> C (1:1)

Nun ich versuche eine Instanz von B zu löschen. Das Funktioniert indem ich die Instanz aus der Liste entferne. Die von B referenzierte Instanz C wird aber nicht gelöscht... Trotz

Java:
@OneToOne(cascade = CascadeType.ALL)

oder

Java:
@OnDelete(action = OnDeleteAction.CASCADE)

Ich habe es auch probiert mit:
Java:
_em.remove(C)

So bekomme ich eine IllegalArgumentException: Removing a detached instance. Auch in der umgekehrten Reihnefolge habe ich versucht: also zuerst B und dann C zu löschen... Es klappt einfach nicht.. Wie kriege ich diese hartnäckige C-Instanz aus der Datenbank weg?????:L

Hilfe!!

Gruß,madlena
 
Die Lösung war: die zu löschende Instanz B zuerst zu mergen und erst dann sie aus der Liste zu entfernen.

Java:
B b2 = _em.merge(bToDelete);
if(b2 != null) {
   C c = b2.getC();
   b2.setC(null);
   a.removeInstance(b2);
   if(c!=null)
     _em.remove(c);
   
}
 
ach so, ohne die Annotationen in der Klasse B funktioniert es nicht:

Java:
@OneToOne(cascade = CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
 

Zurück
Oben