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



## turmaline (1. Feb 2011)

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


```
@OneToOne(cascade = CascadeType.ALL)
```

oder


```
@OnDelete(action = OnDeleteAction.CASCADE)
```

Ich habe es auch probiert mit:

```
_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


----------



## turmaline (1. Feb 2011)

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


```
B b2 = _em.merge(bToDelete);
if(b2 != null) {
   C c = b2.getC();
   b2.setC(null);
   a.removeInstance(b2);
   if(c!=null)
     _em.remove(c);
   
}
```


----------



## turmaline (3. Feb 2011)

ach so, ohne die Annotationen in der Klasse B funktioniert es nicht:


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


----------

