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 :

Foreign key yy must have same number of columns as zz [Mapping]


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Foreign key yy must have same number of columns as zz
    Bonjour,

    Quand je tente un session.save(personne); pour une seule Personne, j'ai ce message d'erreur:
    Foreign key (FK_g4uaceies78lhtnyyl79k3pjm:CV [ID])) must have same number of columns as the referenced primary key (PERSONNE [ID,idx])
    J'ai bien vérifié ce que je faisais dans la doc mais ça ne suffit pas donc j'ai pu rater certains concepts.

    Voici la classe Personne:
    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
    public class Personne {
        Integer id;
        String nom;
        String prenom;
        Integer codePostal;
        String adresse;
        String ville;
        String naissance;
        String mail;
        String telephone;
        ArrayList<CV> cvs;
        ArrayList<String> permis;
        Integer role;
        String login;
        String motDePasse;
        Double longitude;
        Double latitude;
    et son hbm.xml:
    Code xml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated Dec 4, 2014 10:28:55 AM by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="fr.itescia.cevetek.administration.Personne" table="PERSONNE">
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="native" />
            </id>
            <property name="nom" type="java.lang.String">
                <column name="NOM" />
            </property>
            <property name="prenom" type="java.lang.String">
                <column name="PRENOM" />
            </property>
            <property name="codePostal" type="java.lang.Integer">
                <column name="CODEPOSTAL" />
            </property>
            <property name="adresse" type="java.lang.String">
                <column name="ADRESSE" />
            </property>
            <property name="ville" type="java.lang.String">
                <column name="VILLE" />
            </property>
            <property name="naissance" type="java.lang.String">
                <column name="NAISSANCE" />
            </property>
            <property name="mail" type="java.lang.String">
                <column name="MAIL" />
            </property>
            <property name="telephone" type="java.lang.String">
                <column name="TELEPHONE" />
            </property>
            <list name="cvs" inverse="false" table="CV" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index>
                    <column name="idx" />
                </list-index>
                <one-to-many class="fr.itescia.cevetek.exportation.CV" />
            </list>
            <list name="permis" inverse="false" table="PERSONNE" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <element type="java.lang.String">
                    <column name="PERMIS" />
                </element>
            </list>
            <property name="role" type="java.lang.Integer">
                <column name="ROLE" />
            </property>
            <property name="login" type="java.lang.String">
                <column name="LOGIN" />
            </property>
            <property name="motDePasse" type="java.lang.String">
                <column name="MOTDEPASSE" />
            </property>
            <property name="latitude" type="org.hibernatespatial.GeometryUserType"  column="latitude"/>
            <property name="longitude" type="org.hibernatespatial.GeometryUserType"  column="longitude"/>
        </class>
    </hibernate-mapping>
    Comme vous pouvez le voir elle a pour attribut un ArrayList de CV avec une mapping one (la personne) to many (les cvs).

    La classe CV ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class CV {
        Integer id;
        ArrayList<Formation> formations;
        ArrayList<Experience> experiences;
        ArrayList<Competence> competences;
        ArrayList<Langue> langues;
        ArrayList<Loisir> loisirs;
        Date dateModif;
        Date dureeSupp;
    et son hbm.xml à ça:
    Code xml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated Dec 4, 2014 10:28:55 AM by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="fr.itescia.cevetek.exportation.CV" table="CV">
            <id name="id" type="java.lang.Integer">
                <column name="ID_CV" />
                <generator class="native" />
            </id>
            <list name="formations" inverse="false" table="FORMATION" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <one-to-many class="fr.itescia.cevetek.profil.Formation" />
            </list>
            <list name="experiences" inverse="false" table="EXPERIENCE" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <one-to-many class="fr.itescia.cevetek.profil.Experience" />
            </list>
            <list name="competences" inverse="false" table="COMPETENCE" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <one-to-many class="fr.itescia.cevetek.profil.Competence" />
            </list>
            <list name="langues" inverse="false" table="LANGUE" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <one-to-many class="fr.itescia.cevetek.profil.Langue" />
            </list>
            <list name="loisirs" inverse="false" table="LOISIR" lazy="true">
                <key>
                    <column name="ID" />
                </key>
                <list-index></list-index>
                <one-to-many class="fr.itescia.cevetek.profil.Loisir" />
            </list>
            <property name="dateModif" type="java.sql.Date">
                <column name="DATEMODIF" />
            </property>
            <property name="dureeSupp" type="java.sql.Date">
                <column name="DUREESUPP" />
            </property>
        </class>
    </hibernate-mapping>
    Donc, de ce que je comprends du message d'erreur, Hibernate voit la clé primaire de personne comme une clé composite, alors que ça n'est défini nulle part. Et de l'autre coté, il voit la clé étrangère de CV comme une clé simple, alors qu'elle devrait avoir son index aussi, vu que c'est une liste.

    Du coup, j'ai du mal à comprendre ce que j'ai raté, ça devrait être un many-to-one le mapping en fait ?
    Où est-ce que je devrais mettre une clé composite sur CV au lieu qu'Hibernate le gère lui même pour les index ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Je pense que ta classe CV a besoin d'une clef composée, avec l'id et l'index. Mais pourquoi n'utilises-tu pas simplement des oneToMany ?
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Parce que j'avais l'habitude d'utiliser des ArrayList quand je gérais moi même le SQL.

    Effectivement, j'ai tout retypé en Set et ça marche beaucoup mieux

    Merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/02/2014, 08h49
  2. Réponses: 9
    Dernier message: 31/12/2010, 12h08
  3. Réponses: 2
    Dernier message: 18/02/2010, 18h08
  4. Réponses: 2
    Dernier message: 02/04/2008, 13h21
  5. Erreur: conflit avec la contrainte FOREIGN KEY SAME TABLE
    Par useretl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/10/2007, 12h27

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