1 pièce(s) jointe(s)
[Spring / Hibernate / JPA] Relation Many to One
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é:
Code:
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() { ... |
ma classe Formation avec l'annotation IdClass :
Code:
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 |
dans ma Classe Employé j'ai donc tous les champs qui le définissent avec un Id en auto-increment, son nom, prenom ...
et toutes les relations:
Code:
1 2 3
| @OneToMany(mappedBy="employe")
private List<Formation> formations;
.... |
Je dois enregistrer en base mes champs hidden par ex pour formation:
Pièce jointe 181517
<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 :
Code:
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> |
coté bean j'ai:
Code:
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