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
}
}
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.
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.