Bonjour,
Je me trouve face à problème que je n'arrive pas à résoudre après de nombreuses recherches sur Internet.
Je réalise un formulaire qui va me permettre de générer un CV.
J'utilise spring, hibernate, jpa, js, jsp, jtsl, côté BDD MySQL.
Mon problème est le suivant: j'ai un employé qui a une liste de formations, d’expériences pro etc.
J'ai également des relations many to many pour gérer l'auto-complétion, notamment pour ses compétences.
Comment je fais pour stocker une liste de formations propre à un employé sachant que je n'ai pas son ID avant de générer le CV (d'enregistrer dans la base) ??
J'avais vu sur Internet que certains utilisent une classe intermédiaire comme celle-ci, mais je commence à avoir des doutes quant à son utilité:
ma classe Formation avec l'annotation IdClass :
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 public class FormationPK implements Serializable{ protected int idFormation; protected int idEmp; public FormationPK() { super(); // TODO Auto-generated constructor stub } public FormationPK(int idFormation, int idEmp) { super(); this.idFormation = idFormation; this.idEmp = idEmp; } @Override public int hashCode() { ...
dans ma Classe Employé j'ai donc tous les champs qui le définissent avec un Id en auto-increment, son nom, prenom ...
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 @Entity @IdClass(FormationPK.class) public class Formation implements Serializable{ @Id private int idFormation; @Id private int idEmp; private String annee; private String intitule; @ManyToOne @JoinColumn(name="idEmp", insertable = false, updatable = false) // clef etrangère private Employe employe; //constucteurs, getters et setter
et toutes les relations:
Je dois enregistrer en base mes champs hidden par ex pour formation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @OneToMany(mappedBy="employe") private List<Formation> formations; ....
<input type="hidden" value="2014 - BTS Informatique" name="formations[0]">
Hibernate s'occuperait de stocker comme un grand l'id de mon emp, mais pour ça je dois lui indiquer le bon path :
coté bean j'ai:
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 <div class="row"> <div class="form-group col-lg-12"> <label for="inputAnneeForm">Année d'obtention :</label> <input type="text" class="form-control" id="inputAnneeForm" onkeypress="return validationUt(event, 'Formation()')" /> </div> </div> <div class="row"> <div class="form-group col-lg-12"> <label for="inputLibelleForm">Libellé :</label> <input type="text" class="form-control" id="inputLibelleForm" onkeypress="return validationUt(event, 'Formation()')"/> </div> </div> <div class="row"> <div class="form-group col-lg-12"> <button type="button" class="btn btn-primary bouton" onclick="ajouterFormation()">ajouter une autre formation</button> </div> </div> <div class="row"> <div class="form-group col-lg-12"> <div id="listeCacheeForm"> <c:if test="${cvForm.getFormations().size() > 0}"> <c:forEach begin="0" end="${cvForm.getFormations().size()}" var="index" > <f:hidden path="formations[${index}]"/> <!-- on récupère la valeur qui se situe à l'index indiqué entre crochet --> </c:forEach> </c:if> </div> <div id="afficherListeForm"> </div> </div> </div>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class CvForm { private List<TypeCompTM> typesCTM; private Employe emp = new Employe (); private List<String> formations= new ArrayList<String>(); .... // + getter et setter
Lex explications sont brouillons je vous l'accorde ! J'ai dû mal à comprendre le fonctionnement de ces frameworks, merci de m'eclairer
Partager