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

Hibernate Java Discussion :

Clé primaire composée de deux champs dans table de jointure


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 244
    Par défaut Clé primaire composée de deux champs dans table de jointure
    Bonjour,

    Une classe "Utilisateur" contient la définition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)  
        @JoinTable(name="utilisateur_adresse", joinColumns=@JoinColumn(name="uti_id"), inverseJoinColumns=@JoinColumn(name="adr_id"))  
        private List<Adresse> listAdresse = null;
    ... et la classe "Adresse" contient la définition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @ManyToMany(mappedBy = "listAdresse", fetch = FetchType.LAZY)
        private List<Utilisateur> listUtilisateur = null;
    La table de jointure "utilisateur_adresse" est bien créée de cette manière.

    Par contre la clé de cette table doit être composée des deux champs "uti_id" et "adr_id". Mais la table créée ne contient tout simplement pas de clé primaire. Seules les clés secondaires sont définies.

    Quelle est l'annotation qui permet de définir cette clé primaire composée dans la table de jointure ?

    Merci pour vos réponse.

    A+

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par Mister Nono Voir le message
    Bonjour,

    Une classe "Utilisateur" contient la définition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)  
        @JoinTable(name="utilisateur_adresse", joinColumns=@JoinColumn(name="uti_id"), inverseJoinColumns=@JoinColumn(name="adr_id"))  
        private List<Adresse> listAdresse = null;
    Exemple en utilisant une PK spécifique basée sur une séquence, et en supposant que vos PKs sont des long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	@ManyToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
    	@JoinTable(name = "utilisateur_adresse", joinColumns = @JoinColumn(name = "uti_id"),
    			inverseJoinColumns = @JoinColumn(name = "adr_id")/* you could also add foreign key name definition to avoid 'system' names: , foreignKey = @ForeignKey(name = "fk_uti_id"),
    			inverseForeignKey = @ForeignKey(name = "fk_adr_id") */ )
    	@CollectionId(columns = @Column(name = "utiadd_id"), type = @Type(type = "long"), generator = "seq_utiadd_id")
    	@SequenceGenerator(name = "seq_utiadd_id", sequenceName = "s_utiadd_id", allocationSize = 1 ) // s_utiadd_id: name of the sequence in the RDBMS
        private List<Adresse> listAdresse = new ArrayList<>();
    si vous voulez que la PK soit la clé composée des 2 FKs il faudra aussi faire un EmbeddedId à référencer dans @Type au lieu du long (et pas besoin de generator et @SequenceGenerator…).

  3. #3
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 244
    Par défaut
    Merci pour cet exemple.

    Je vais essayer cela.

    A+

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2010, 15h29
  2. [AC-2003] Comparer deux champs dans une table et remplir un autre champ
    Par frexville dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/09/2009, 12h52
  3. Réponses: 3
    Dernier message: 18/04/2008, 14h28
  4. calcul entre deux champs dans une table
    Par pomar dans le forum Access
    Réponses: 7
    Dernier message: 29/11/2006, 18h27
  5. Lier deux champs dans deux tables ?
    Par Olivierc dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 23h13

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