Partage
  • Partager sur Facebook
  • Partager sur Twitter

JPA - ManyToMany

    9 février 2010 à 12:03:26

    Bonjour,

    j'implémente JPA sur un projet pour gérer la persistance des données.
    J'ai deux classes qui ont une association bidirectionnelle en 1..* des 2 côtés.
    Je doit donc faire un ManyToMany pour sauvegarder dans la bdd. Mais je n'y arrive pas, j'ai nottament les erreurs suivantes :

    mappedBy reference an unknown target entity property: projects.Group.patient_list in projects.Patient.group


    Voici mes classes :
    package projects;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    
    
    @Entity
    public class Project {
    	
    	private int id;
    	private String name;
    	private Collection<Group> group_list;
    	
    	//Constructors
    	public Project()
    	{
    		group_list = new ArrayList<Group>();
    	}
    	
    	public Project(String Pname)
    	{
    		group_list = new ArrayList<Group>();
    		name = Pname;
    	}
    
    	//Getters and Setters
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	@OneToMany(mappedBy="project")
    	public Collection<Group> getGroup_list() {
    		return group_list;
    	}
    	
    	public void setGroup_list(Collection<Group> group_list) {
    		this.group_list = group_list;
    	}
    	
    	//Methods
    	public void addGroup(Group group)
    	{
    		group_list.add(group);
    	}
    }
    


    package projects;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.JoinColumn;
    
    @Entity
    public class Group {
    	
    	private int id;
    	private String name;
    	private Project project;
    	private Collection<Patient> patient_list;
    	//Constructors
    	
    	public Group()
    	{
    		setName(new String(""));
    		patient_list = new ArrayList<Patient>();
    	}
    	
    	//Getters and Setters
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	
    	public void setId(int id) {
    		this.id = id;
    	}	
    	
    	public String getName() {
    		return name;
    	}
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
        
        @JoinTable(
            name="Group_Patient",
            joinColumns=@JoinColumn(name="id_group"),
            inverseJoinColumns=@JoinColumn(name="id_patient")
        )
        @ManyToMany
    	public Collection<Patient> getPatient() {
    		return patient_list;
    	}
    	
    	public void setPatient(Collection<Patient> patient) {
    		this.patient_list = patient;
    	}
    
    	public Project getProject() {
    		return project;
    	}
    	
    	public void setProject(Project project) {
    		this.project = project;
    	}
    	
    	//Methods
    	public void addPatient(Patient patient)
    	{
    		this.patient_list.add(patient);
    	}
    }
    


    package projects;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    
    @Entity
    public class Patient {
    	
    	private int id;
    	private String name;
    	private Collection<Group> group_list;
    	private String file_path;
    	
    	//Constructors
    	
    	public Patient()
    	{
    		setName(new String(""));
    		setFile_path(new String(""));
    		group_list = new ArrayList<Group>();
    	}
    	
    	//Getters and Setters
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@ManyToMany(mappedBy="patient_list")
    	public Collection<Group> getGroup() {
    		return group_list;
    	}
    	
    	public void setGroup(Collection<Group> group) {
    		this.group_list = group;
    	}
    
    	public String getFile_path() {
    		return file_path;
    	}
    	
    	public void setFile_path(String file_path) {
    		this.file_path = file_path;
    	}
    	
    	//Methods
    	public void addGroup(Group group)
    	{
    		group_list.add(group);
    	}
    }
    


    import java.util.Collection;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
    
    import projects.Group;
    import projects.Patient;
    import projects.Project;
    
    
    public class testSQLiteMRIJ {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("mySql");
    		
    		EntityManager em = emf.createEntityManager();
    		
    		EntityTransaction tx = null;
    		try {
    			tx = em.getTransaction();
    			tx.begin();
    			
    			Project p1 = new Project();
    			p1.setName("Projet1");
    			
    			Group g1 = new Group();
    			g1.setName("Groupe1");
    			g1.setProject(p1);
    			
    			Group g2 = new Group();
    			g2.setName("Groupe2");
    			g2.setProject(p1);
    			
    			p1.addGroup(g1);
    			p1.addGroup(g2);
    			
    			Patient patient1 = new Patient();
    			patient1.setName("patient1");
    			patient1.setFile_path("chemin du fichier");
    			patient1.addGroup(g1);
    			
    			Patient patient2 = new Patient();
    			patient2.setName("patient2");
    			patient2.setFile_path("chemin du fichier...dj");
    			patient2.addGroup(g1);
    			patient2.addGroup(g2);
    			
    			g1.addPatient(patient1);
    			g1.addPatient(patient2);
    			g2.addPatient(patient2);
    			
    			em.persist(p1);
    			em.persist(g1);
    			em.persist(g2);
    			em.persist(patient1);
    			em.persist(patient2);
    			
    			tx.commit(); // do the flush automatically
    						
    		} catch (RuntimeException e) {
    			if (tx != null && tx.isActive())
    				tx.rollback();
    			throw e; // or display error message
    		} finally {
    			em.close();
    		}
    		emf.close(); // close at application end
    	}
    
    }
    


    Quelqu'un a-t-il déjà eu ce problème ?
    • Partager sur Facebook
    • Partager sur Twitter
      9 février 2010 à 17:31:15

      Si tu veux utiliser ManyToMany tu dois rendre ton association uni-directionnelle. Une table d’association est donc nécessaire au niveau de la base de données :)
      Bon courage.
      • Partager sur Facebook
      • Partager sur Twitter

      JPA - ManyToMany

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown