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