Hallo!
im Rahmen meiner Diplomarbeit, muss ich mich auch ein wenig mit Hibernate beschäftigen. Mein aktuelles Problem schildert sich wie folgt.
Ich habe ein bidirektionales ManyToMany Mapping zwischen den Entitäten Person und Termin:
Code:
public class Person {
private Set<Termin> termine = new HashSet<Termin>();
@ManyToMany(mappedBy="personen")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
public Set<Termin> getTermine() {
return termine;
}
}
public class Termin {
private Set<Person> personen = new HashSet<Person>();
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name="rel_termin_person",
joinColumns={@JoinColumn(name="termin_id", referencedColumnName="termin_id")},
inverseJoinColumns={@JoinColumn(name="personen_id",referencedColumnName="personen_id")})
public Set<Person> getPersonen() {
return personen;
}
}
Die Tabellen in der DB:
Tabelle: Person
personen_id
Tabelle: Termin
termin_id
Tabelle: rel_termin_person
personen_id
termin_id
Jetzt das Problem:
Wenn ich einen Termin lösche, bspw.
session.delete(Termin.class, ..(1) funktioniert alles einwandfrei. Der Termin wird gelöscht und die Relationen in der Tabelle rel_termin_person auch. Personen wie gewünscht keine.
Lösche ich aber eine Person und möchte auch alle Relationen in der Tabelle rel_termin_person gelöscht haben, werden auch sämtliche Termine und alle Relationen, die in Verbindung mit dem Termin stehen, gelöscht. Das soll aber nicht sein. Augenblicklich habe ich Cascade auf SAVE_UPDATE gestellt, damit mir nicht immer alle Termine beim Testen gleich mitgelöscht werden.
Der Ablauf sollte aber irgendwann folgender sein.
Beim Löschen einer Personen sollen auch alle Verbindungen dieser Person mit einem oder mehreren Terminen in der rel_termin_person Tabelle gelöscht werden. Ein Termin darf nur dann gelöscht werden, wenn es sich bei der Person um die letzte Verbindung mit einem Termin handelt.
Ansonsten nur die Relationen.
Ich hoffe die Beschreibung ist verständlich. Ich bedanke mich schon einmal im vorraus für alle Antworten und Eure Bemühungen.
mfg Roland
P.S.: Zum Schluß noch eine ganz andere Frage. Kann mir vielleicht jemand erklären, worin der Unterschied zwischen Hibernate Session und Hibernate EntityManager liegt, ausser daß der EntityManager die Umsetzung der EJB3 Spezifikation ist?