Bonjour,
Je suis débutante en JPA. J'ai deux entités: Student et Studentclass.
Student à une clé étrangère qui correspond au nom d'une Studentclass.
Cependant lorsque je persist un Student, JPA me persist aussi un Studentclass (ce qui m'engendre une duplication de primary key et donc une erreur).
Or je ne veux pas persister Studentclass lorsque je persist un Student (ou alors je veux pouvoir ignorer l'ajout d'une clé si elle existe déjà mais pas sûre que ce soit la meilleure méthode).
J'en appelle donc à votre aide, j'ai essayé pas mal de choses et j'ai essayer de trouver quelqu'un avec un problème similaire, en vain. Pourtant ça doit être une erreur évidente/basique... Voici mes classes et ma méthode de persistance:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 @Entity(name = "studentclass") public class Studentclass implements Serializable{ public Studentclass() { super(); } public Studentclass(String name) { super(); this.name = name; } @Id private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 @Entity(name = "student") public class Student implements Serializable{ public Student() { super(); } public Student(Studentclass studentclass) { super(); this.studentclass = studentclass; } @Id @Column private int id; @ManyToOne @JoinColumn(name = "studentclass_name", referencedColumnName = "name", insertable = false, updatable = false) private Studentclass studentclass; public int getId() { return id; } public void setId(int id) { this.id = id; } public Studentclass getStudentclass() { return studentclass; } public void setStudentclass(Studentclass studentclass) { this.studentclass = studentclass; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //On suppose que les données de Studentclass ont déjà été persistées Studentclass myStudentclass= new Studentclass(); Student myStudent = new Student(); myStudentclass.setName("Maths"); //Qui existe donc déjà dans la base myStudent.setName("Delphine"); myStudent.setStudentclass(myStudentclass); EntityManager.persist(myStudent);
C'est là que j'obtiens une erreur de duplication car il a voulu persister un Studentclass (ce que je ne veux pas)
Merci par avance,
Delphine
Partager