Bonjour,

J'ai la problématique suivante:
3 objets, stagiaire, formateur et commercial
ce sont tout les 3 des personnes et chaque personne peux être à la fois stagiaire, formateur et commercial
le formateur et le commercial sont des salariés.

Donc 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
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
 
@Entity
@Table(name = "Personne")
@Inheritance(strategy=InheritanceType.JOINED)
public class Personne
{
        @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "Id", updatable = false, nullable = false)
	protected Long id;
 
        @Column(name="nom")
	protected String nom;
 
	public String getNom() {return nom;}
	public void setNom(final String nom){this.nom = nom;}
}
 
@Entity
@Table(name = "Salarie")
public class Salarie extends Personne
{
        @Column(name = "dateNaissance",nullable = true)
	@Temporal(TemporalType.DATE)
	private Date dateNaissance;
 
        public Date getDateNaissance() {return dateNaissance;}
	public void setDateNaissance(Date dateNaissance) {this.dateNaissance = dateNaissance;}
}
 
@Entity
@Table(name = "Stagiaire")
public class Stagiaire 
{
        @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "Id", updatable = false, nullable = false)
	protected Long id;
 
        @OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "Id_Personne", nullable = true)
	private Personne personne;
}
 
@Entity
@Table(name = "Commercial/Formateur")
public class Commercial/Formateur  extends BaseEntity 
{
 
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "Id", updatable = false, nullable = false)
	protected Long id;
 
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "Id_salarie", nullable = true)
	private Salarie salarie;
}
Lorsque je créer un stagiaire/formateur/commercial je choisi une personne si elle existe sinon j'en créer une nouvelle.
Avec CascadeType.ALL lors du merge(stagiaire/formateur/commercial) il m'en crée un nouveau de façon systématique hors je souhaite que le système mette a jours si personne.Id existe et créer si pas de personne.Id.
Avec CascadeType.MERGE lors du merge(stagiaire/formateur/commercial) il m'en crée pas un nouveau par contre le système met a jours si personne.Id existe


Et deuxième point si je veux créer un nouveau formateur à partir d'un ancien stagiaire je doit transformer une personne en salarie sans créer une nouvelle ligne dans la BDD est ce possible?