IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Jointure sur une clé composée


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut Jointure sur une clé composée
    Bonjour,

    je suis à la recherche de la bonne méthode pour pouvoi faire une jointure entre deux objets se composant comme suit :
    L'objet devant mapper la relation en question
    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
    @Table(name="affaires")
    public class Affaire {
     
    	@Id
    	@SequenceGenerator(name="AFFAIRE_GENERATOR", sequenceName="aff_idseq")
    	@GeneratedValue(generator="AFFAIRE_GENERATOR")
    	@Column(name="aff_id")
    	private Integer affId;
     
    	@Column(name="aff_etat_cvt30")
    	private String affEtatCvt30;
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name="affEtatCvt30", referencedColumnName="tpv_id")
    	private DomaineValeur valeur;
    }
    Les domaines de valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Entity
    @Table(name="domaine_valeurs")
    public class DomaineValeur {
     
    	@EmbeddedId
    	private DomaineValeurPK id;
     
    	@Column(name="tpv_idtps", insertable=false, updatable=false)
    	private Integer tpvIdtps;
     
    	@Column(name="tpv_id", insertable=false, updatable=false)
    	private String tpvId;
    }
    la clé composite des domaine de valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Embeddable
    public class DomaineValeurPK {
     
    	@Column(name="tpv_idtps")
    	private Integer tpvIdtps;
     
    	@Column(name="tpv_id")
    	private String tpvId;
    }
    Dans l'idée le champ tpvIdtps prendrait la valeur 30 (comme le nom du champ sur l'affaire le laisse apparaître.
    la valeur de tpvId dépenderait de la valeur du champ affEtatCvt30 de l'objet affaire.

    Ainsi la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @JoinColumn(name="affEtatCvt30", referencedColumnName="tpv_id")
    n'est pas fonctionnelle puisque nécessitant la valeur 30 en plus, mais cette valeur étant static comme la passer à la jointure ?

    Merci d'avance de vos lumières.

    HadanMarv

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Bonjour,

    J'ai du mal à croire que personne n'a la solution, ou personne n'a compris le sens de ma question ?
    HadanMarv

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par HadanMarv Voir le message
    Bonjour,

    J'ai du mal à croire que personne n'a la solution, ou personne n'a compris le sens de ma question ?
    HadanMarv
    Bonjour,
    J'ai pas tout capté je l'avoue, mais en d'autres termes voudrais tu faire une jointure conditionnelle? c'est bien ça? si oui Non ce n'est pas possible.Je te conseillerais de faire une jointure sans condition, et mettre en place une NamedQuery qui va extraire l'entité en fonction de la valeur 30.Mais encore une fois j'ai pas tout capté.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    En fait c'est possible que j'ai mal expliqué aussi.

    la clé primaire de la table Affaire est une séquence.
    La clé primaire de la table DomaineValeur est une clé composé d'une séquence et d'un code.

    Dans la table Affaire je ne stocke que le code.
    Le but est de faire la jointure entre les deux en passant en constante la séquence de la clé composé que je connais à l'avance.

    j'ai trouvé un début de réponse avec les JoinColumnOrFormula d'hibernate qui donne un truc de ce style

    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
     
    @Entity
    @Table(name="affaires")
    public class Affaire {
     
    	@Id
    	@SequenceGenerator(name="AFFAIRE_GENERATOR", sequenceName="aff_idseq")
    	@GeneratedValue(generator="AFFAIRE_GENERATOR")
    	@Column(name="aff_id")
    	private Integer affId;
     
    	@Column(name="aff_etat_cvt30")
    	private String affEtatCvt30;
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumnsOrFormulas({
    		@JoinColumnOrFormula(
    				column=@JoinColumn(
    							name="aff_ancien_etat_cvt30", referencedColumnName="tpv_id", insertable=false, updatable=false
    							)
    				),
    		@JoinColumnOrFormula(
    				formula=@JoinFormula(
    						value="30", referencedColumnName="tpv_idtps"
    						)
    				)
    	})
    	private DomaineValeur valeur;
    }
    Cela fonctionne bien pour le moment. En revanche j'aurai préféré me détacher de l'implémentation et trouver des annontations JPA. mais bon j'utilise Hibernate donc çà me va bien. Je pensais que cette problèmatique avait été couverte.

    HadanMarv

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24
  2. Réponses: 15
    Dernier message: 14/04/2006, 15h34
  3. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  4. Réponses: 5
    Dernier message: 06/09/2005, 16h01
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo