-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Double relation OneToOne pour une clé entrangère impossible?
PostPosted: Fri Oct 12, 2012 1:26 pm 
Newbie

Joined: Fri Oct 12, 2012 12:57 pm
Posts: 1
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


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.