Bonjour, je suis débutant avec hibernate, je veux inserer des données dans une table qui est associée avec une autre table par une relation manytomany.lors de l'insertion la donnée est inserée dans la table mais l'association avec l'autre données qui se trouve dans la seconde table ne se fait pas. (c'est une appli j2ee utilisant les framework jsf2+spring+hibernate)
voici mes fichier
@Entity
@Table(name="USER")
public class User {
private int id;
private String nom;
private Set<Formation> mesformations;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the nom
*/
@Column(name="NOM",length=50)
public String getNOM() {
return nom;
}
/**
* @param nom the nom to set
*/
public void setPathologie(String nom) {
this.nom = nom;
}
/**
* @return the mesFormations
*/
@ManyToMany
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})
@JoinTable(name = "USER_FORM",
joinColumns = @JoinColumn(name = "user_id",
referencedColumnName = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "form_id", referencedColumnName = "ID"))
public Set<Formation> getMesFormations() {
return mesFormations;
}
/**
* @param mesFormations the mesFormations to set
*/
public void setMesFormations(Set<Formation> mesFormations) {
this.mesFormations = mesFormations;
}
public void addToFormation(Formation formation) {
if(mesFormation==null)
{
mesFormations=new HashSet<Formation>();
}
mesFormations.add(formation);
}
}
fichier formation.java
@Entity
@Table(name="Foramtion")
public class Formation {
private int id;
private String nomFormation;
private int nombreMatiere;
private Set<User> mesUsers;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the mesUsers
*/
@ManyToMany(mappedBy = "mesFormations",fetch=FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})
public Set<User> getMesUsers() {
return mesUsers;
}
/**
* @param mesUsers the mesUsers to set
*/
public void setMesUsers(Set<User> mesUsers) {
this. mesUsers = mesUsers;
}
/**
* @return the nomFormation
*/
@Column(name="NOM_FORMATION",length=50,unique=true)
public String getNomFormation() {
return nomForamtion;
}
/**
* @param nomFormation the nomForamtion to set
*/
public void setNomForamtion(String nomForamtion) {
this.nomForamtion = nomForamtion;
}
/**
* @return the nombreMatiere
*/
public int getNombreMatiere() {
return nombreMatiere;
}
/**
* @param nombreMatiere the nombreMatiere to set
*/
public void setNombreMatiere(int nombreMatiere) {
this.nombreMatiere = nombreMatiere;
}
public void addToUser(User user) {
if(mesUser==null)
{
mesUsers=new HashSet<User>();
}
mesUsers.add(user);
user.addToFormation(this);
}
public void removeFromUser(User user) {
this.getMesUsers().remove(user);
user.getMesUsers().remove(this);
}
}
la methode de la couche DAO qui permet de faire la persistence d'un user
public User enregistrer(User user) {
// TODO Auto-generated method stub
this.getSession().beginTransaction();
this.getSession().persist(user);
this.getSession().beginTransaction().commit();
return Entity ;
}
</code>
la methode de la couche service qui permet d'appeler la methode enregistrer de la couche dao
public User persistUser(User user, List<Integer> idList){
for(Integer id : idList){
Formation form = iformationDao.findById(id);
form.addToUser(user);
}
return iuserDao.enregistrer(user);