-->
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.  [ 2 posts ] 
Author Message
 Post subject: Anfänger. Ein drittes Objekt ist hinzugekommen
PostPosted: Tue Sep 05, 2006 11:48 am 
Newbie

Joined: Tue Aug 29, 2006 5:03 pm
Posts: 12
Location: Leipzig
Hallo,

ich beziehe mich auf das Thema

http://forum.hibernate.org/viewtopic.php?t=964102 (Anfänger. zwei Objekte)

Nachdem mir LaLiLuna supergut geholfen hat, stehe ich nun erneut vor einem Problem.

Ich habe nun eine dritte Klasse eingeführt. Ein Kind darf nun auch mehrere Spielzeuge haben.

Dazu habe ich die Klasse Kind und sein mapping angepasst:

Code:
package Familie;

import java.util.HashSet;
import java.util.Set;
public class Kind
{
    private Long id;
    private String jahre;
    private String hobby;
    private Vater vater;
    private Set spielzeuge = new HashSet();
     
    public Long getId() {return id;}
    public String getJahre(){return jahre;}
    public String getHobby(){return hobby;}
    public Vater getVater(){return vater;}
    public Set getSpielzeuge(){return spielzeuge;}
   
    public void setId(Long id){this.id=id;}
    public void setJahre(String jahre){this.jahre = jahre;}
    public void setHobby(String hobby){this.hobby=hobby;}
    public void setVater(Vater vater){this.vater=vater;}
    public void setSpielzeuge(Set spielzeuge){this.spielzeuge=spielzeuge;}
    /** Creates a new instance of Kind */
    public Kind()
    {
    }
   
}
mapping:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="Familie">
   <class name="Kind" >
      <id name="id" column="id" type="long">
         <generator class="native"/>
      </id>
           <property name="jahre"/>
                <property name="hobby"/>
                <many-to-one name="vater" column="vater" class="Vater"/>
<set name="spielzeuge" cascade="all" lazy="true"  >
            <key>
            <column name="kind"/>
            </key>
            <one-to-many class="Spielzeug"/>
           
        </set>
    </class>
</hibernate-mapping>



Spielzeug:

Code:
package Familie;

/**
*
* @author heiko
*/
public class Spielzeug
{
    Long id;
    String spielzeugname;
    Kind kind;
   
    public void setId(Long Id  )  { this.id=id; }
    public void setSpielzeugname(String spielzeugname  ){this.spielzeugname=spielzeugname;} 
    public void setkind(Kind kind){this.kind=kind;}
   
    public  String getSpielzeugname(){return spielzeugname;}
    public  Kind getKind(){return kind;}
    public  Long getId() { return id;  }
           
    /** Creates a new instance of Spielzeug */
    public Spielzeug()
    {
    }
}

mapping:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="Familie">
   <class name="Spielzeug" >
      <id name="id" column="id" type="long">
         <generator class="native"/>
      </id>
           <property name="spielzeugname"/>
                <many-to-one name="kind" column="kind" class="Kind"/>
    </class>
</hibernate-mapping>



Also ist die Relation jetzt

Vater - 1:m - Kind - 1:m - Spielzeug

Nun lege ich ein Spielzeug an mit:





Code:
Query baba = session.createQuery("from Vater where vorname ='"Heiko'");

         Vater v = (Vater) baba.list().get(0);
         
         Iterator itr = v.getKinder().iterator();
         
         Kind k = (Kind) itr.next();
         
         Spielzeug s= new Spielzeug();
         
         s.setSpielzeugname("Auto");
       
         
        k.getSpielzeuge().add(s);
        session.save(k);
         transaction.commit();



Dann bekomme ich beim commit nach der ersten ausführen:

Hibernate: insert into Spielzeug (spielzeugname, kind) values (?, ?)
Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: identifier of an instance of Familie.Spielzeug was altered from 1 to null
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:51)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:150)


Was habe ich denn falsch gemacht?
Bin für jede Hilfe sehr dankbar!

MfG
Heiko


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 08, 2006 11:36 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
bidirectionale Beziehungen sollte man auf beiden Seiten setzen -> siehe Handbuch
und es empfiehlt sich auch inverse="true" auf der 1-Seite zu setzen
-> siehe Handbuch

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 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.