Bonjour à tous,
Je suis confontré à un problème et je ne sais pas si une solution existe.
Je simplifie, j'ai une classe Couple définie comme suit :
Code:
@Entity(name = "Couple")
public class Couple {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "coupleId", nullable = false)
private Long id;
@OneToOne(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH }, mappedBy = "couple")
@Basic(optional = true)
private Personne mari;
@OneToOne(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH }, mappedBy = "couple")
@Basic(optional = true)
private Personne femme;
...
}
Et une classe Personne définie comme suit :
Code:
@Entity(name = "Personne")
public class Personne {
@OneToOne
@JoinColumn(name = "couple_fk")
@Basic(optional = true)
private Couple couple;
@Column(nullable = true)
@Enumerated(EnumType.ORDINAL)
private PersonneType mariOuFemme;
}
En gros un couple peut être composé d'un mar seul, d'une femme seule ou d'un mari et une femme.
Le problème c'est qu'après avoir insérer un mari et créer un couple avec un mari seul, je veux insérer une femme et quand je récupère mon objet Couple pour y ajouter ma femme l'objet Couple que me retourne hibernate comporte soit deux Personnes qui sont deux fois le mari soit null.
Il semblerait, avec les classes que j'ai défini, qu'hibernate ne soit pas capable de faire la différence entre en homme et une femme.
La requête qui me remonte un Couple null est la suivante :
Code:
SELECT DISTINCT couple
FROM mon.package.Couple couple
left join fetch couple.mari as m
left join fetch couple.femme as f
WHERE (m.departureOrArrival = mon.package.PersonneType.MARI OR m is null)
AND (f.departureOrArrival = mon.package.PersonneType.FEMME OR f is null)
La requête qui me retourne un Couple avec deux maris est la suivante :
Code:
SELECT DISTINCT couple FROM mon.package.VisitData couple
left join couple.mariivalFlightLeg as mari with mari.PersonneType = mon.package.PersonneType.MARI
left join couple.femmeartureFlightLeg as femme with femme.PersonneType = mon.package.PersonneType.FEMME
Est-ce possible d'avoir deux relations OneToOne avec une seul clé étrangère dans la table Personne ? Existe t-il une solution ? Sans avoir les deux clés étrangères dans la table Couple.
Par avance, merci.
Nicco83