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 :

cles primaires composites


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut cles primaires composites
    Salut,
    J'ai 2 tables A et B ayant respectivement les clés id_A et id_B
    j'ai créé une table C ayant pour clé composite id_A et id_B qui sont 2 clés étrangères et 2 autres colonnes cl_1 et cl_2
    Mon problème est que j'ai pas pu transformer les colonnes id_A et id_B pour former l'identifiant composite de la table C
    Merci d'avance

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    et t'as fait avec quelle base de données, j ai le même problème sous mysql apparament c'est une limitation de MySQL qui ne supporte pas les foreign key sur une clef primaire composé

    si t es sous mysql la seule solution que je connaisse est de supprimer les mapping, de ne gardé qu'une référence (en int par exemple) et de setter la valeur

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Salut
    Il parait que c'est le meme probleme, j'utilise moi aussi MySql
    Merci pour la reponse

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Désolé de contredire, mais ça ne vient pas de mySql qui supporte très bien une clé primaire composée de clés étrangères.
    Au niveau d'Hibernate, il faudra certainement passer par une clé du genre
    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
     
    <hibernate-mapping>
        <class name="hibernate.objects.AlAvoirDom" table="al_avoir_dom">
            <comment></comment>
            <composite-id name="id" class="hibernate.objects.AlAvoirDomId">
                <key-property name="gruMnemo" type="string">
                    <column name="gru_mnemo" length="20" />
                </key-property>
                <key-property name="domNum" type="int">
                    <column name="dom_num" />
                </key-property>
            </composite-id>
            <many-to-one name="alGroupeU" class="hibernate.objects.AlGroupeU" update="false" insert="false" fetch="select">
                <column name="gru_mnemo" length="20" not-null="true">
                    <comment></comment>
                </column>
            </many-to-one>
            <many-to-one name="alDomaine" class="hibernate.objects.AlDomaine" update="false" insert="false" fetch="select">
                <column name="dom_num" not-null="true">
                    <comment></comment>
                </column>
            </many-to-one>
        </class>
    </hibernate-mapping>
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    qui ne supporte pas les foreign key sur une clef primaire composé

    exemple :

    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
    30
    31
    32
    33
    34
     
    DROP TABLE IF EXISTS `type`;
    CREATE TABLE `type` (
      `id_type` int(4) NOT NULL AUTO_INCREMENT,
      `text` text NOT NULL,
      PRIMARY KEY  (`id_type`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    DROP TABLE IF EXISTS `lang`;
    CREATE TABLE `lang` (
      `id_lang` int(4) NOT NULL AUTO_INCREMENT,
      `name` text NOT NULL,
      PRIMARY KEY  (`id_lang`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
     
    DROP TABLE IF EXISTS `message`;
    CREATE TABLE `message` (
      `id_message` int NOT NULL,
      `text` text NOT NULL,
      `ref_type` int(4),
      `ref_lang` int(2) NOT NULL,  
      FOREIGN KEY `FK_MESSAGE_TYPE` (`ref_type`) REFERENCES `type` (`id_type`),
      PRIMARY KEY  (`id_message`,`ref_lang`),
      FOREIGN KEY `FK_MESSAGE_LANG` (`ref_lang`) REFERENCES `lang` (`id_lang`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    DROP TABLE IF EXISTS `country`;
    CREATE TABLE `country` (
      `id_country` int(11) NOT NULL,
      `ref_message` int(4) NOT NULL,
      `country_code` char(2) NOT NULL,
      PRIMARY KEY  (`id_country`,`ref_message`),
      FOREIGN KEY `FK_country_MESSAGE` (`ref_message`)  REFERENCES `message` (`id_message`,`ref_lang`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    création de coutry impossible

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ca fonctionne très bien.
    Ton problème dans l'exemple que tu montres, c'est que tu utilises ref_message dans ta table country alors que la clé primaire de message est id_message + ref_lang !
    Ca, il n'y a pas que avec MySQL que ça ne fonctionne pas !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/08/2010, 09h50
  2. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  3. [debutant]cle primaire particuliere
    Par christophebmx dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/08/2004, 13h27
  4. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20
  5. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 09h04

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