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 : 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() { ...
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
@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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
	@OneToMany(mappedBy="employe")
	private List<Formation> formations;
	....
Je dois enregistrer en base mes champs hidden par ex pour formation:
Nom : formation.png
Affichages : 112
Taille : 17,3 Ko
<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 : 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>
coté bean j'ai:
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