enregistrer les informations d'une table lié par une jointure
Bonjour a tous,
Ca fait un bout de temps que je galère là dessus et je ne comprend pas. pourquoi les donnée de mesures ne sont pas rajoutées dans ma base de donnée.
un patient a une ou plusieurs mesure.
et une mesure correspond a un seul patient.
Voila le main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class Schema {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Patient p1 = new Patient("Oki", "mimi", "2 rue des gateaus", 75018, "Paris", "0147601439", "okimimi@gmail.com", "doc guessoum", 1, "à suivre lors des consultations");
Mesure m1 = new Mesure("20/05/2008", "08:00", 1.99, 0, 0, "");
p1.add(m1);
em.persist(p1);
em.getTransaction().commit();
em.close();
emf.close();
}
} |
jusque là rien d'anormal.
ensuite, voici comment je définit mes classes:
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
|
@Entity
@Table(name="Patient")
public class Patient implements Serializable{
@Id
@Column
@GeneratedValue(strategy=GenerationType.AUTO)
private int ref;
//@Column (name="ref", unique=true, nullable=false, length=4, insertable=false, updatable=false)
private String nom;
private String prenom;
private String adresse;
private int cp;
private String ville;
private String telephone;
private String email;
private String suivi_par;
private int type_diabete;
private String diagnostic;
@OneToMany(mappedBy = "patient", cascade =CascadeType.ALL)
//@JoinColumn(name="patient_id")
private Collection<Mesure> mesures;
//ou Map ou Set peu importe
// constructor from super-class
public Patient() {
super();
this.init();
// TODO Auto-generated constructor stub
}
//constructors using fields
public Patient(String nom, String prenom, String adresse, int cp,
String ville, String telephone, String email, String suivi_par,
int type_diabete, String diagnostic) {
super();
this.nom = nom;
this.prenom = prenom;
this.adresse = adresse;
this.cp = cp;
this.ville = ville;
this.telephone = telephone;
this.email = email;
this.suivi_par = suivi_par;
this.type_diabete = type_diabete;
this.diagnostic = diagnostic;
this.init();
}
//getters and setters
...
public Collection<Mesure> getMesures() {
return mesures;
}
public void setMesures(Collection<Mesure> mesures) {
this.mesures = mesures;
}
public void init(){
mesures= new ArrayList<Mesure>();
}
public void add(Mesure nouvelle){
for (Mesure mesure: mesures)
mesure.setPatient(this);
//mesures.add(nouvelle);
}
} |
et ma classe Mesure:
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
|
@Entity
@Table(name="Mesure")
public class Mesure {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idMesure;
//@Column(name="mesure_id")
private String dat;
private String heure;
private double glycemie;
private double mixtard30;
private double axtrapide;
private String commentaire;
@ManyToOne
//@JoinColumn(name = "patient_id", referencedColumnName="ref")
private Patient patient;
//constructor from super-class
public Mesure() {
super();
// TODO Auto-generated constructor stub
}
//constructors using fields
public Mesure(String dat, String heure, double glycemie, double mixtard30, double axtrapide, String commentaire) {
super();
//this.idMesure = idMesure;
this.dat = dat;
this.heure = heure;
this.glycemie = glycemie;
this.mixtard30 = mixtard30;
this.axtrapide=axtrapide;
this.commentaire=commentaire;
}
//getters and setters
public int getIdMesure() {
return idMesure;
}
public String getDat() {
return dat;
}
public void setDat(String dat) {
this.dat = dat;
}
public String getHeure() {
return heure;
}
public void setHeure(String heure) {
this.heure = heure;
}
...
public Patient getPatient() {
return patient;
}
public void setPatient(Patient patient) {
this.patient = patient;
}
} |
Donc avec ceci, normalement, je peut voir l'enregistrement Mesure dans ma table attaché par une étrangère ici patient_id contenant le numéro du patient dans mesure.
Or, il se trouve que l'enregistrement de patient est contenu dans la base tandis que celui de ca mesure rien, c'est vide.
Quelqu'un saurait-il me guider, svp?
merciiiii