# Hibernate Abhängigkeiten mitlöschen



## Gaaast (25. Nov 2011)

Hallo,
ich habe mit Hibernate folgendes gemapped:

Eine User Tabelle


Eine Auftrags Tabelle

Jeden User gibt es einmal, der kann aber x beliebig viele Aufträge haben (also eine 1:m Beziehung).

In der User-Entity die ich in Java angelegt habe gibt es keinen Eintrag für die Aufträge, da ich von dieser Seite nie darauf zugreife.

In den Auftrag-Entity ist ein

```
@ManyToOne(optional = true)
public User getUser()
{
    return user;
}
```

Wenn ein Auftrag gelöscht wird, soll der User unverändert bleiben.
Wenn ein User gelöscht wird sollen aber alle Aufträge mitgelöscht werden.

Mit einem cascade = CascadeType.ALL in der ManyToOne Beziehung in Auftragsseite kann ich es machen, dass der Nutzer mitgelöscht wird, wenn der Auftrag gelöscht wird. Das will ich nicht, ich will es genau anders rum. Aber in der Nutzer-Tabelle habe ich keine Beziehung angegeben, in der ich es angeben kann.


Gibt es eine Möglichkeit eine Cascade für die Aufträge in der User-Entity anzugeben, ohne sie zusätzlich dort zu speichern (das würde nur die Create Auftrag Methode unnötig verkomplizieren, da ich dort ja dann auch immer den Auftrag bei Nutzer eintragen muss).


Hoffe ihr habt mein Anliegen verstanden.

Danke


----------



## Gaaast (28. Nov 2011)

Hm, hat da keiner Erfahrung darin?


----------



## Andgalf (28. Nov 2011)

Ohne Mapping auf der User-Seite wird es mit einem Cascade nicht gehen würde ich sagen.


----------



## maki (28. Nov 2011)

Das Mapping lautet : Auftrag -> User
d.h. der User weiss erstmal nix _direkt_ von seinen Auträgen, deswegen wirst du da IMHO keine Cascade definieren können, also keine JPA Magic.

Denke du wirst dass einfach in Java umsetzen müssen, also deine Beziehungen selber verwalten müssen und JPA speichert (inkl. löschen) dass dann nur noch.

Ansonsten müsstest du dass zu eine Bidirektionalen Bezieuhung umbauen, wäre imho aber die schlechtere Lösung nur um JPA cascade zu verwenden..


----------



## Andgalf (28. Nov 2011)

Es gibt noch die Möglichkeit einen entsprechenden Interceptor zu schreiben ... das wäre allerdings mit Spatzen auf Kanonen schießen


----------



## maki (28. Nov 2011)

Wäre imho der falsche Weg 

JPA/Hibernate managed ja nicht plötzlich die Beziehungen zwischen deinen Objekten automatisch mit, dass muss man schon selber machen.
Cascade ist eher als bequeme Option zu verstehen, nicht als Standard.


----------

