OneToOne save et Heritage
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:
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?