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 :

[hibernate3] Mapping hbm avec clefs primaires composees


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut [hibernate3] Mapping hbm avec clefs primaires composees
    Erreur : java.lang.ExceptionInInitializerError

    Bonjour.
    J'essaie de faire le mapping de 2 tables.

    La première a un clef composite à 4 champs :

    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
    <composite-id name="comp_id" class="Prix">
            <key-property 
                name="cdProduit" 
                column="CD_PRODUIT" 
                type="java.lang.String"
                length="6"
            />
            <key-property 
                name="cdPrix" 
                column="CD_PRIX" 
                type="java.lang.String"
                length="3"
            />
            <key-property 
                name="dtDebutPrix" 
                column="DT_DEBUT_PRIX" 
                type="java.sql.Date"
                length="7"
            />
            <key-property 
                name="dtFinPrix" 
                column="DT_FIN_PRIX" 
                type="java.sql.Date"
                length="7"
            />
        </composite-id>
    et la deuxième à 2 champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        <composite-id name="comp_id" class="Produit">
            <key-property 
                name="cdProduit" 
                column="CD_PRODUIT" 
                type="java.lang.String"
                length="6"
            />
            <key-property 
                name="lcProduit" 
                column="LC_PRODUIT" 
                type="java.lang.String"
                length="50"
            />
        </composite-id>
    Je voudrais récupérer la liste des produits correspondant à un prix.
    J'ai commencé à ajouter un set de Produits dans Prix.
    La jointure entre les tables est CD_PRODUIT (plusieurs produits ont le meme CD_PRODUIT, différencié par le LC_PRODUIT, d'ou la clefs composées)

    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
     
    <set
            name="produit"
            lazy="true"
            inverse="false"
    		cascade="all"
     
        >
            <key>
                <column name="CD_PRODUIT" />
            </key>
     
            <one-to-many 
                class="Produit"
            />
        </set>
    mais ça ne marche pas :
    PRODUITS [CD_PRODUIT])) must have same number of columns as the referenced primary key (PRIX [CD_PRODUIT,CD_PRIX,DT_DEBUT_PRIX,DT_FIN_PRIX])

  2. #2
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    J'ai alors essayé ça pour la premiere clef composite, c'est à dire faire pointer directement l'element cd_produit de la clef composite vers la table produit :

    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
       <composite-id name="comp_id" class="PrixPK">
    		<key-many-to-one
                name="cdProduit" 
                class="Produit"  
            >
            	<column name="CD_PRODUIT" />
            </key-many-to-one>        
            <key-property 
                name="cdPrix" 
                column="CD_PRIX" 
                type="java.lang.String"
                length="3"
            />
            <key-property 
                name="dtDebutPrix" 
                column="DT_DEBUT_PRIX" 
                type="java.util.Date"
                length="7"
            />
            <key-property 
                name="dtFinPrix" 
                column="DT_FIN_PRIX" 
                type="java.util.Date"
                length="7"
            />
        </composite-id>
    et voici l'erreur :

    Foreign key (FK28D910231B25D89BRIX [CD_PRODUIT])) must have same number of columns as the referenced primary key (PRODUITS [CD_PRODUIT,LC_PRODUIT])
    Encore un pb de nombre de colonnes

  3. #3
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    je me dis alors que je vais mettre les deux colonnes de la 2eme table dans la clef de la premiere :

    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
       <composite-id name="comp_id" class="PrixPK">
    		<key-many-to-one
                name="cdProduit" 
                class="Produit"  
            >
            	<column name="CD_PRODUIT" />
            	<column name="LC_PRODUIT" />
            </key-many-to-one>        
            <key-property 
                name="cdPrix" 
                column="CD_PRIX" 
                type="java.lang.String"
                length="3"
            />
            <key-property 
                name="dtDebutPrix" 
                column="DT_DEBUT_PRIX" 
                type="java.util.Date"
                length="7"
            />
            <key-property 
                name="dtFinPrix" 
                column="DT_FIN_PRIX" 
                type="java.util.Date"
                length="7"
            />
        </composite-id>
    Là le fichier hbm est compilé ( mes fichiers .java sont générés automatiquement par hibernate synchronizer), mais évidemment, les requetes plantent vu que la colonne LC_Produit n'existe pas dans ma table PRIX :/
    java.sql.SQLException: ****"."LC_PRODUIT": invalid identifier

  4. #4
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Donc j'en suis là
    Bien cherché mais c pas encore ça. AU SECOURS

  5. #5
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    J'ai encore essayé ça :
    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
     	<set
            name="Produit"
            lazy="true"
            inverse="false"
    		cascade="all"
     
        >
            <key>
                <column name="CD_PRODUIT" />
                <column name="CD_PRIX" />
                <column name="DT_DEBUT_PRIX" />
                <column name="DT_FIN_PRIX" />
            </key>
     
            <one-to-many 
                class="Produit"
            />
        </set>
    Là aussi la génération des .java se passe bien car je met les 4 champs de la cle primaire, mais bien sûr la requête bloque car les champs cd_prix, cd_dt... n'existent pas dans PRODUIT

Discussions similaires

  1. Problème avec une clef primaire
    Par marcbo dans le forum VBA Access
    Réponses: 14
    Dernier message: 23/03/2011, 11h16
  2. Réponses: 1
    Dernier message: 27/10/2010, 23h23
  3. Réponses: 2
    Dernier message: 15/10/2008, 15h49
  4. MAJ d'un champ d'une table avec condition sur clef primaire commune
    Par ar|equin dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/05/2007, 13h57
  5. Clef primaire access, Indexé avec doublon
    Par Asurmena dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 11h04

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