Bonjour,
essayez le suivant:
Fournisseur:
Code:
package composite;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
public class Fournisseur implements Serializable {
private String idBase; // PK
private String idFourn; //PK
private String lib;
private String prop;
public Fournisseur() {
}
public Fournisseur(String base, String id) {
this.idBase = base;
this.idFourn = id;
}
Collection escapades = new HashSet();
public Fournisseur addEscp(Escp escp) {
getEscapades().add(escp);
escp.setFournisseur(this);
return this;
}
public String getIdBase() {
return idBase;
}
public void setIdBase(String idBase) {
this.idBase = idBase;
}
public String getIdFourn() {
return idFourn;
}
public void setIdFourn(String idFourn) {
this.idFourn = idFourn;
}
public String getLib() {
return lib;
}
public void setLib(String lib) {
this.lib = lib;
}
public String getProp() {
return prop;
}
public void setProp(String prop) {
this.prop = prop;
}
public String toString() {
return idBase + " " + idFourn + " " + lib;
}
public Collection getEscapades() {
return escapades;
}
public void setEscapades(Collection escapades) {
this.escapades = escapades;
}
}
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>
<class name="composite.Fournisseur" table="FOURN">
<composite-id>
<key-property name="idBase" column="idBase"/>
<key-property name="idFourn" column="idFourn1"/>
</composite-id>
<!-- simple props -->
<property name="lib"/>
<property name="prop"/>
<!-- a set of escp -->
<set name="escapades" inverse="true" lazy="true" cascade="all">
<key>
<column name="idBase"/>
<column name="idFourn2"/>
</key>
<one-to-many class="composite.Escp"/>
</set>
</class>
</hibernate-mapping>
Escp:
Code:
package composite;
import java.io.Serializable;
public class Escp implements Serializable {
private String idBase;
private String idFourn;
private String idEscp;
private String info;
private Fournisseur fournisseur;
public Escp() {
}
public Escp(Fournisseur fournisseur) {
setFournisseur(fournisseur);
}
public String getIdBase() {
return idBase;
}
public void setIdBase(String idBase) {
this.idBase = idBase;
}
public String getIdEscp() {
return idEscp;
}
public void setIdEscp(String idEscp) {
this.idEscp = idEscp;
}
public String getIdFourn() {
return idFourn;
}
public void setIdFourn(String idFourn) {
this.idFourn = idFourn;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public Fournisseur getFournisseur() {
return fournisseur;
}
public void setFournisseur(Fournisseur fournisseur) {
this.fournisseur = fournisseur;
this.idBase = fournisseur.getIdBase();
this.idFourn = fournisseur.getIdFourn();
}
public String toString() {
return idBase + " " + idFourn + " " + idEscp + " " + info;
}
}
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>
<class name="composite.Escp" table="ESCP">
<composite-id>
<key-property name="idBase" column="idBase"/>
<key-property name="idFourn" column="idFourn2"/>
<key-property name="idEscp" column="idEscp2"/>
</composite-id>
<!-- simple props -->
<property name="info"/>
<!-- fournisseur -->
<many-to-one name="fournisseur" class="composite.Fournisseur" insert="false" update="false">
<column name="idBase"/>
<column name="idFourn2"/>
</many-to-one>
</class>
</hibernate-mapping>
Exemple d'usage:
Code:
package composite;
import io.CollectionDumper;
import io.HibernateUtil;
import org.hibernate.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import junit.framework.TestCase;
public class LoadFournisseurTestCase extends TestCase {
private static Log log = LogFactory.getLog(LoadFournisseurTestCase.class);
protected Session s;
protected void setUp() throws Exception {
super.setUp();
s = HibernateUtil.getSession();
HibernateUtil.beginTransaction();
}
protected void tearDown() throws Exception {
super.tearDown();
HibernateUtil.commitTransaction();
}
public LoadFournisseurTestCase(String arg0) {
super(arg0);
}
public void testLoad() {
Fournisseur f = new Fournisseur();
f.setIdBase("base1");
f.setIdFourn("cocacola");
Fournisseur fload = (Fournisseur)s.get(Fournisseur.class, f);
log.error("loaded f: " + fload);
CollectionDumper.dump(log, fload.getEscapades());
}
public void testSave() {
Fournisseur fload = (Fournisseur)s.get(Fournisseur.class, new Fournisseur("base1", "cocacola"));
Escp escp = new Escp();
escp.setInfo("some nice info");
escp.setIdEscp("escpIdXXX" + new java.util.Date());
fload.addEscp(escp);
s.update(fload);
}
}
Ce qui reste est de realiser les operation equals() et hashMap() de la classe Escp sur le cles (idBase, idFourn, idEscp), afin de la faire adequate pour la classe java.util.Set.
Je vous conseillerais d'acheter le livre "Hibernate in Action", beaucoup de chose utile se trouvent la.