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 :

Problème de mapping Foreign key must have same number of columns as the referenced primary key


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Par défaut Problème de mapping Foreign key must have same number of columns as the referenced primary key
    Bonjour, après avoir passé deux jours a chercher je n'ai trouver aucune explication a mon problème :

    J'ai un ensemble de tables... le problème viens des association je présume :

    voila mes fichiers de mapping mais qui ne marchent pas :

    mapping A.hbm.xml
    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
     
    <!--  CLASS CATEGORISATION ENTREPRISE -->
        <class name="package.name.Categorisationentreprise" table="categorisationentreprise" schema="public">
    <!--  PK  -->
            <id name="categorisationentrepriseId" type="int">
                <column name="categorisationentreprise_id" />
                <generator class="assigned" />
            </id>
    <!--  REFERENCES  -->
            <many-to-one name="entreprise" class="package.name.Entreprise" fetch="select" >
    			<column name="entreprisedonneesgestion_id" not-null="true" /> 
            </many-to-one>
     
     
    <!--simple properties-->
            <property name="nom" type="short">
                <column name="nom" not-null="true" />
            </property>
            <property name="sigle" type="short">
                <column name="sigle" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>

    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
     
    <!-- CLASS ENTREPRISE   -->
        <class name="package.name.Entreprise" table="entreprise" schema="public">
    <!-- PK  -->
            <composite-id name="id" class="package.name.EntrepriseId">
                <key-property name="acteurObjetId" type="int">
                    <column name="acteur_objet_id" />
                </key-property>
                <key-property name="objetId" type="int">
                    <column name="objet_id" />
                </key-property>
            </composite-id>
     
    <!-- REFERENCES  -->
     
    ....
            <set name="categorisationentreprises" inverse="true">
                <key>
                    <column name="entreprisedonneesgestion_id" not-null="true" />
                </key>
                <one-to-many class="package.name.Categorisationentreprise" /> 
            </set>
    ....
        </class>
    J'ai toujours ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: org.hibernate.MappingException: Foreign key (FKC2D2CE6B2A3B6F15:categorisationentreprise [entreprisedonneesgestion_id])) must have same number of columns as the referenced primary key (entreprise [acteur_objet_id,objet_id])
    Je cherche l'erreur mais j'ai aucune idée sachant que je suis nouveau dans le monde Hibernate

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Eh bien il te dit que l'association ne peut se faire, vu que dans l'association tu lui définis la Categorisation avec une seule valeur, alors qu'elle est normalement définie avec 2 (la clé primaire, composite).

    Donc ou bien ton association est mal pensée (il manque une colonne), ou bien ta clé primaire devrait être simplifiée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Par défaut
    Alors je vais plutôt détaillé le schéma rapidement il me parait propre :

    Table A
    -------
    PK : a


    Table B
    -------
    PK : b


    Table C
    -------
    PK : c

    Table D (entreprise dans mon poste précédent)
    -------
    PK : d1 (A_a, B_b)
    FK : d2 (C_c de la table C)


    Table E (Catégorie dans mon poste précédent
    --------
    PK : e
    FK : e2 (qui est D_d2)

    Et donc le mapping précédent était pour les tables D et E

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Tu ne peux pas faire autrement ?

    Sinon, si ta FK est unique, tu peux alors la déclarer unique, et l'utiliser en property-ref.

    Cela dit, je crois que ça merde quand même en conjonction avec une clé composite sur de vieilles version d'hibernate ...

    Pour faire autrement : puisque ta FK pointe vers la table C, tu peux faire une jointure qui semble naturelle entre C et E ; et bien sûr la jointure en C et D. De là tu peux récupérer la propriété E sur D.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Par défaut
    Merci pour toutes ses réponses Rei Ichido, cela dit comme je suis nouveau dans le monde BD et hibernate peut tu me donné un exemple pour les solutions que tu m'as données. ou comment répercuter ses changements sur mon projet .

    Merci bien

  6. #6
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    En utilisant une property-ref :

    Dans CATEGORISATION ENTREPRISE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <many-to-one name="entreprise" class="package.name.Entreprise" fetch="select" property-ref="_le_nom_de_la_propriete_d2_dans_la_classe">
    		<column name="entreprisedonneesgestion_id" not-null="true" /> 
            </many-to-one>
    Cela dit, il faut pour que ça passe signifier que la propriété est unique :

    Dans ENTREPRISE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          <property name="_le_nom_de_la_propriete_d2_dans_la_classe" unique="true">
                <column name="entreprisedonneesgestion_id" />
           </property>

Discussions similaires

  1. [Mapping] Foreign key yy must have same number of columns as zz
    Par golgoth9 dans le forum Hibernate
    Réponses: 2
    Dernier message: 19/12/2014, 20h54
  2. Réponses: 3
    Dernier message: 04/02/2014, 08h49
  3. Problème de mapping Foreign key one-to-one
    Par chady dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/06/2010, 23h35
  4. Réponses: 2
    Dernier message: 18/02/2010, 18h08
  5. Réponses: 2
    Dernier message: 02/04/2008, 13h21

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