-->
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: one-to-many-Set detached
PostPosted: Thu Nov 30, 2006 2:04 pm 
Newbie

Joined: Wed Jul 26, 2006 7:51 am
Posts: 4
Hallo!

Ich habe in einem Parent-Mapping ein one-to-many-Set auf eine Child-Klasse. Dieses Set wird mit lazy=true automatisch aus der DB gelesen.

Nachdem die Session weg ist, ist das Parent-Objekt ja "detached". Nun verändere ich per Programm etwas an dem Set. D. h. Child-Objekte können verändert werden, neue Child-Objekte können hinzukommen, bestehende wiederum aus dem Set entfernt werden.

Nun möchte ich das alles wieder abspeichern. Das Parent-Objekt wird gespeichert, aber das Set wird ja nicht automatisch auch gespeichert.

Wie krieg ich das hin?

Ich habe in der Hibernate-Doku die one-to-many Abschnitte in Kapitel 6, sowie Kapitel 7 gelesen, allerdings fehlt mir immer noch der Durchblick....

Natürlich könnte ich beim Speichern des Parent-Objektes auch durch das Child-Set durchgehen und jedes einzelne Objekt auch speichern. Aber eigentlich müssten ja auch die aus dem Set entfernten Child-Objekte in der Datenbank gelöscht werden.....

Danke!


Top
 Profile  
 
 Post subject:
PostPosted: Thu Nov 30, 2006 6:33 pm 
Newbie

Joined: Wed Jul 26, 2006 7:51 am
Posts: 4
Ich habe gerade etwas gefunden, das die Lösung für mich sein könnte (kann es leider im Moment nicht ausprobieren)...

Im Set kann man cascade="all-delete-orphan" angeben... hört sich recht vielversprechend an.

Hat jemand damit Erfahrungen?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 01, 2006 5:08 am 
Newbie

Joined: Tue Nov 28, 2006 12:46 pm
Posts: 6
Hallo!

Ich bin zwar ein Newbie aber ich kann ja das posten, was ich habe und was auch funktioniert.

Datenbank:

Code:
document
-------------
documentID
documentName
personID
.....



person
------------
personID
personName



Zwei Klassen: "Document.java" und "Person.java"

Person.java
Code:
...
/**
    * @return the userID
    * @hibernate.id generator-class="native" column="personID"
    */
   public Long getPersonID()
   {
      return personID;
   }

   /**
    * @param userID the userID to set
    */
   public void setPersonID( Long personID )
   {
      this.personID = personID;
   }
...


Document.java
Code:
         /**
    * @hibernate.bag cascade="all-delete-orphan"
    *
    * @hibernate.collection-key column="documentID"
    *
    * @hibernate.collection-one-to-many class="com.***.***.persistent.Person"
    *
    * @return Returns a list of users
    */
   public List getPersonList()
   {
      return personList;
   }
   
   /**
    * Sets a list of persons
    *
    * @param personList the person list
    */
   public void setPersonList( List personList )
   {
      this.personList = personList;
   }


Und als Ergebnis muesstest Du etwas so wie das hier haben:

Document.hbm.xml

Code:
....
<bag name="personList" lazy="false" cascade="all-delete-orphan" inverse="false" mutable="true" optimistic-lock="true" embed-xml="true">
  <key column="documentID" on-delete="noaction" />
  <one-to-many class="com.***.***.persistent.Person" not-found="exception" embed-xml="true" />
  </bag>
....


Ich habe die Erfahrung gemacht, dass bei cascade="all-delete-orphan", nicht nur das parent objekt sondern ebenfalls auch die child objekte veraendert werden. Das heisst, loescht Du das Document-Objekt, wird auch die Person geloescht. Haengt jetzt von Deinem Scenario ab, was Du haben moechtest.

Ich hoffe es hilft, wenn nicht dann wieder melden.

Gruss,
Dariusz


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.