2 pièce(s) jointe(s)
Mapper une association many to many avec des attributs
Bonjour,
Je souhaiterais mapper une association many to many avec des attributs selon l'exemple suivant :
Citation:
A peut avoir plusieurs B
B peut avoir plusieurs A
C association entre A et B
create table A(
idA int primary key,
champA string
);
create table B(
idB int primary key,
champB string
);
create table C(
idA integer,
idB integer,
attributC varchar ,
constraint pk primary key (idA,idB),
foreign key (idA) references A(idA),
foreign key (idB) references B(idB)
);
Voici ce que j'ai fait :
- La classe pharmacien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| package com.beans;
import java.util.HashSet;
import java.util.Set;
public class Pharmacien {
private Set<DonnerMedicaments> medicaments_phar = new HashSet<DonnerMedicaments>(0);
private int num_phar;
private String prenom;
private String nom;
private String email;
public Set<DonnerMedicaments> getMedicaments_phar() {
return medicaments_phar;
}
public void setMedicaments_phar(Set<DonnerMedicaments> medicaments_phar) {
this.medicaments_phar = medicaments_phar;
}
public int getNum_phar() {
return num_phar;
}
public void setNum_phar(int num_phar) {
this.num_phar = num_phar;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAdr() {
return adr;
}
public void setAdr(String adr) {
this.adr = adr;
}
public int getTel() {
return tel;
}
public void setTel(int tel) {
this.tel = tel;
}
public String getPswd() {
return pswd;
}
public void setPswd(String pswd) {
this.pswd = pswd;
}
public String getSexe() {
return sexe;
}
public void setSexe(String sexe) {
this.sexe = sexe;
}
private String adr;
private int tel;
private String pswd;
private String sexe;
} |
le mapping de la classe pharmacien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?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="com.beans">
<class name="Pharmacien" table="pharmacien">
<id name="num_phar" type="int" column="num_phar">
<!-- <generator class="native"/> -->
</id>
<property name="prenom" type="string" column="prenom" />
<property name="nom" type="string" column="nom" />
<property name="email" type="string" column="email" />
<property name="adr" type="string" column="adr" />
<property name="tel" type="int" column="tel" />
<property name="pswd" type="string" column="pswd" />
<property name="sexe" type="string" column="sexe" />
<!-- one to many pharmacien&donner_medicaments -->
<set name="medicaments_phar" table="donner_medicaments"
inverse="true" lazy="true" fetch="select">
<key>
<column name="num_phar" not-null="true" />
</key>
<one-to-many class="DonnerMedicaments" />
</set>
</class>
</hibernate-mapping> |
la classe patient
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| package com.beans;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class Patient {
private Set<DonnerMedicaments> medicaments_pat = new HashSet<DonnerMedicaments>(0);
private int num_pat;
private String nom_pat;
private String pr_pat;
private String sexe_pat;
public String getSexe_pat() {
return sexe_pat;
}
public void setSexe_pat(String sexe_pat) {
this.sexe_pat = sexe_pat;
}
private int tel_pat;
public int getTel_proch() {
return tel_proch;
}
public void setTel_proch(int tel_proch) {
this.tel_proch = tel_proch;
}
private int tel_proch;
private String email_pat;
private String adr_pat;
public Set<DonnerMedicaments> getMedicaments_pat() {
return medicaments_pat;
}
public void setMedicaments_pat(Set<DonnerMedicaments> medicaments_pat) {
this.medicaments_pat = medicaments_pat;
}
public int getNum_pat() {
return num_pat;
}
public void setNum_pat(int num_pat) {
this.num_pat = num_pat;
}
public String getNom_pat() {
return nom_pat;
}
public void setNom_pat(String nom_pat) {
this.nom_pat = nom_pat;
}
public String getPr_pat() {
return pr_pat;
}
public void setPr_pat(String pr_pat) {
this.pr_pat = pr_pat;
}
public int getTel_pat() {
return tel_pat;
}
public void setTel_pat(int tel_pat) {
this.tel_pat = tel_pat;
}
public String getEmail_pat() {
return email_pat;
}
public void setEmail_pat(String email_pat) {
this.email_pat = email_pat;
}
public String getAdr_pat() {
return adr_pat;
}
public void setAdr_pat(String adr_pat) {
this.adr_pat = adr_pat;
}
public String getProfess_pat() {
return profess_pat;
}
public void setProfess_pat(String profess_pat) {
this.profess_pat = profess_pat;
}
public Date getDat_naiss_pat() {
return dat_naiss_pat;
}
public void setDat_naiss_pat(Date dat_naiss_pat) {
this.dat_naiss_pat = dat_naiss_pat;
}
public String getLieu_naiss() {
return lieu_naiss;
}
public void setLieu_naiss(String lieu_naiss) {
this.lieu_naiss = lieu_naiss;
}
private String profess_pat;
private Date dat_naiss_pat;
private String lieu_naiss;
} |
le mapping de la classe patient
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?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="com.beans">
<class name="Patient" table="patient">
<id name="num_pat" type="int" column="num_pat">
<!-- <generator class="native"/> -->
</id>
<property name="pr_pat" type="string" column="pr_pat" />
<property name="nom_pat" type="string" column="nom_pat" />
<property name="email_pat" type="string" column="email_pat" />
<property name="adr_pat" type="string" column="adr_pat" />
<property name="tel_pat" type="int" column="tel_pat" />
<property name="tel_proch" type="int" column="tel_proch" />
<property name="sexe_pat" type="string" column="sexe_pat" />
<property name="profess_pat" type="string" column="profess_pat" />
<property name="dat_naiss_pat" type="date" column="dat_naiss_pat" />
<property name="lieu_naiss" type="string" column="lieu_naiss" />
<!-- one to many patient&donner_medicaments -->
<set name="medicaments_pat" table="donner_medicaments"
inverse="true" lazy="true" fetch="select">
<key>
<column name="num_pat" not-null="true" />
</key>
<one-to-many class="DonnerMedicaments" />
</set>
</class>
</hibernate-mapping> |
LA classe DonnerMedicaments
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package com.beans;
import java.io.Serializable;
import java.util.Date;
public class DonnerMedicaments implements Serializable {
private Patient patient;
private Pharmacien pharmacien;
public Pharmacien getPharmacien() {
return pharmacien;
}
public void setPharmacien(Pharmacien pharmacien) {
this.pharmacien = pharmacien;
}
public Patient getPatient() {
return patient;
}
public void setPatient(Patient patient) {
this.patient = patient;
}
private int num_pat;
private int num_phar;
private Date date;
private String medicament;
public int getNum_pat() {
return num_pat;
}
public void setNum_pat(int num_pat) {
this.num_pat = num_pat;
}
public int getNum_phar() {
return num_phar;
}
public void setNum_phar(int num_phar) {
this.num_phar = num_phar;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getMedicament() {
return medicament;
}
public void setMedicament(String medicament) {
this.medicament = medicament;
}
} |
le mapping de la classe DonnerMedicaments
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?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="com.beans">
<class name="DonnerMedicaments" table="donner_medicaments">
<composite-id>
<key-many-to-one name="num_pat" column="num_pat"
class="Patient"/>
<key-many-to-one name="num_phar" column="num_phar"
class="Pharmacien"/>
</composite-id>
<property name="date" type="date" column="date" />
<property name="medicament" type="string" column="medicament" />
<!-- one to many pour patient_donner_medicaments -->
<many-to-one name="patient" class="Patient" fetch="select" insert="false" update="false">
<column name="num_pat" not-null="true" />
</many-to-one>
<!-- one to many pour pharmacien_donner_medicaments -->
<many-to-one name="pharmacien" class="Pharmacien" fetch="select" insert="false" update="false">
<column name="num_phar" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping> |
L'erreur est ici sachant que j'ai declaré medicaments :
s.save(medicaments);
Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?
Merci d'avance pour votre aide.