bonsoir ,
je veux savoir comment Remplir plusieurs tables à partir d un seul formulaire,je travaille avec jpa et jsf ,
merci d'avance
bonsoir ,
je veux savoir comment Remplir plusieurs tables à partir d un seul formulaire,je travaille avec jpa et jsf ,
merci d'avance
Est ce que tu arrives à remplir une seule table?
A mon avis si tu y parviens, ton problème est résolu, car c'est pareil
merci omar344
oui j'ai réussi à remplir une seule table
j'ai deux tables Candidat et Diplôme(titre,mention,id_candidat est le clé étrangère dans diplome) dans mysql
j'ai crée une une méthode qui fait ajout mais id_candidat=null dans table Diplôme
je suis débutant vous pouvez m'aider
Franchement je n'ai pas compris ce que tu veux dire, mais si tu ajoutes des morceaux de codes comme ça on pourra t'aider![]()
ok
et j'ai une page jsf qui contient les attributs de candidat et diplôme,
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
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
74
75
76
77
78 classe Candidat public class Candidat implements Serializable { @ Id @Column(name ="id_candidat") @GeneratedValue(strategy = GenerationType.AUTO) private Integer idCandidat; @Column(name="nom") private String nom; @Column(name="prenom") private String prenom; @Column(name ="civilite") private String civilite; @Temporal(TemporalType.DATE) @Column(name ="dateNaiss") private Date dateNaiss; @Column(name ="lieuNaiss") private String lieuNaiss; @Column(name ="adresse") private String adresse; @Column(name ="tele") private String tele; @Column(name ="email") private String email; @Column(name ="statutMerital") private String statutMerital; public Candidat() { } @OneToMany(mappedBy ="candidat" ) private List<Diplome> diplomes; } classe Diplome public class Diplome implements Serializable { @Id @Column(name = "id_diplome") @GeneratedValue(strategy=GenerationType.AUTO) private Integer idDiplome; @Column(name = "titre") private String titre; @Column(name ="etablissement") private String etablissement; @Temporal(TemporalType.DATE) @Column(name ="dateObtention") private Date dateObtention; @Column(name ="mention") private String mention; @ManyToOne(cascade = CascadeType.PERSIST) private Candidat candidat; } methode qui ajoute candidat // ajouter un candidat public Candidat ajouterCandidat(Candidat candidat) { getEntityManager().getTransaction().begin(); getEntityManager().persist(candidat); getEntityManager().getTransaction().commit(); return candidat; } methode qui ajoute Diplome public Diplome ajouterDiplome(Diplome diplome) { getEntityManager().getTransaction().begin(); getEntityManager().persist(diplome); getEntityManager().getTransaction().commit(); return diplome; }
je veux une méthode qui permet d'ajouter plusieurs diplomes à un meme candidat .
merci d'avance
Bonjour,
Eh bien voila ce qu'il faut faire :
Tu commences par ajouter ton Candidat (si ce n'est deja fait), et apres Ajout le Candidat à retourner c'est celui fourni par ton entityManager, et non celui qui était en paramètre, ce pour 2 raisons :
-L'identifiant technique est valorisé, il était null dans le paramètre en entrée, si cet identifiant est bien sûr géré automatiquement
-L'objet ajouté est desormais connu dans ton contexte de persistence, donc peut être attaché au Diplome à créer :
Et tu rappelles cette dernière méthode autant de fois qu'il y'a de Diplomes à ajouter.
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 methode qui ajoute candidat // ajouter un candidat public Candidat ajouterCandidat(Candidat candidat) { getEntityManager().getTransaction().begin(); candidat = getEntityManager().persist(candidat); getEntityManager().getTransaction().commit(); return candidat; } //methode qui ajoute Diplome public Diplome ajouterDiplome(Diplome diplome) { diplome.setCandidat(tonCandidatPrecedemmentAjoute); getEntityManager().getTransaction().begin(); getEntityManager().persist(diplome); getEntityManager().getTransaction().commit(); return diplome; }
Partager