-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Problem mit delete und ManyToMany bidirektional
PostPosted: Sun May 13, 2007 8:43 am 
Newbie

Joined: Wed Apr 25, 2007 4:02 pm
Posts: 7
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?


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 21, 2007 5:10 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Bei der XML-Konfiguaration war das Cascade all-delete-orphans dafür zuständig. Etwas ähnliches wird es wohl dann auch für Annotations geben.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 21, 2007 10:42 am 
Newbie

Joined: Wed Apr 25, 2007 4:02 pm
Posts: 7
Hallo FPC!

Danke für deine Antwort. Aber DELETE_ORPHAN schafft das Problem auch nicht aus der Welt. Zumindest wenn ich SAVE_UPDATE nur ersetze. Ich werde weiter suchen. Wahrscheinlich muss ich das porammiertechnisch lösen.

Roland


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.