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 :

Erreur lors d'un one to many


Sujet :

Hibernate Java

  1. #1
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut Erreur lors d'un one to many
    Bonjour à toutes et à tous,

    Je me test sur hibernate et je rencontre une erreur pour faire un one to many.

    L'erreur qui apparaiît est celle ci :
    Association references unmapped class
    Du coté de mon code j'ai :

    Mon fichier de mapping Personn :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="hbm">
      <class name="entities.Personn" table="Personn">
     
            <id name="idPers" column="idUser" type="Long">
                <generator class="sequence"/>
            </id>
     
            <discriminator column="sousclasse" type="character"/>
     
            <property name="firstName" column="firstName" type="string"/>
            <property name="lastName" column="lastName" type="string"/>
     
            <set name="identifications" inverse="true" cascade="all-delete-orphan">
                <key column="idUser"/>
                <one-to-many  class="Identification"/>
            </set>
     
      </class>
    </hibernate-mapping>
    Mon fichier de mapping Identification :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="entities.Identification" table="Identification">
     
            <id name="idUser" column="idUser" type="long">
                <generator class="sequence"/>
            </id>
     
            <property name="nickname" column="nickname" type="String"/>
            <property name="password" column="password" type="String"/>
     
            <many-to-one name="pers" class="Personn" not-null="true"/>
     
      </class>
    </hibernate-mapping>

    Enfin, ma classe qui setter mes "entities" :
    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
     
    Session session = HibernateUtil.getSessionFactory().openSession();
     
            session.beginTransaction();
     
            Personn personn = new Personn();
            Identification identification = new Identification();
     
            personn.setFirstName("Leon");
            personn.setLastName("Dupond");
     
            identification.setNickname("x-plode");
            identification.setPassword("password");
     
            session.getTransaction().commit();
            session.close();

    Pourriez vous me dire où ai je fais une erreur ?

    PS : je vous joins un diagramme UML afin de voir se que j'essaye de faire

    Merci d'avance,
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    As tu bien ajouté les hbm au hibernate.cfg.xml ?

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    Je sais pas si ça va directe résoudre le problème mais dans tes
    <many-to-one name="pers" class="Personn" not-null="true"/>
    <one-to-many class="Identification"/>

    Tu as pas mis les packages où se situent tes classes donc il ne peut pas faire le mapping à ce niveau

  4. #4
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Citation Envoyé par fr1man Voir le message
    As tu bien ajouté les hbm au hibernate.cfg.xml ?
    Oui fr1man, j'ai bien ajouté les hbm au fichier de config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <mapping resource="Personn.hbm.xml"/>
        <mapping resource="Identification.hbm.xml"/>

    Citation Envoyé par zorm Voir le message
    Bonjour,

    Je sais pas si ça va directe résoudre le problème mais dans tes
    [FONT=monospace]
    [/FONT]<many-to-one name="pers" class="Personn" not-null="true"/>[FONT=monospace]
    [/FONT]<one-to-many class="Identification"/>
    Tu as pas mis les packages où se situent tes classes donc il ne peut pas faire le mapping à ce niveau
    Zorm, ton explication m'a permis de pouvoir rechercher dans mes fichiers de config où il y avait apparemment une erreur de déclaration de package de mes classes.

    Malheureusement, je suis tombé sur une autre erreur .
    Dans le but de ne pas surchargé le forum, je ne valide pas ce post afin de pouvoir poster à la suite si j'ai besoin d'aide.
    En tout cas, merci beaucoup.

  5. #5
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Bonjour à tous,

    Je reviens vers car je poursuis mes aventures avec Hibernate.

    Pour mémoire, je souhaite faire un one-to-many en SE.

    Après plusieurs erreurs que j'ai pu résoudre, je fais face à une erreur pertinente qui me pose soucis.

    L'erreur en question :
    SEVERE: Error parsing XML: XML InputStream(9) The content of element type "id" must match "(meta*,column*,type?,generator?)".
    Initial SessionFactory creation failed.org.hibernate.InvalidMappingException: Could not parse mapping document from resource Identification.hbm.xml
    Exception in thread "main" java.lang.ExceptionInInitializerError
    Voici quelques fichiers de mon application.

    Mon fichier mapping de Personn :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="hbm">
      <class name="entities.Personn" table="Personn">
     
            <id name="idUser" column="idUser" >
                <generator class="increment"/>
            </id>
     
            <discriminator column="sousclasse" type="character"/>
     
            <property name="firstName" column="firstName"/>
            <property name="lastName" column="lastName"/>
     
            <set name="identifications" inverse="true" cascade="all-delete-orphan">
                <key column="idUser"/>
                <one-to-many  class="entities.Identification"/>
            </set>
     
      </class>
    </hibernate-mapping>

    Mon fichier de mapping d'Identification :

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="entities.Identification" table="Identification">
     
            <id name="idUser">
                <generator class="increment"/>
                <column name="idUser"/>
            </id>
     
            <property name="nickname" column="nickname"/>
            <property name="password" column="password"/>
     
            <many-to-one name="pers" class="entities.Personn" not-null="true"/>
     
      </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
    Session session = HibernateUtil.getSessionFactory().openSession();
     
            session.beginTransaction();
     
            Personn personn = new Personn();
            Identification identification = new Identification();
     
            personn.setFirstName("Leon");
            personn.setLastName("Dupond");
     
            identification.setNickname("x-plode");
            identification.setPassword("password");
     
            session.getTransaction().commit();
            session.close();
    Je vous remercie d'avance pour l'aide apportée.

  6. #6
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    L'erreur est située au niveau du parsing xml et est "indépendante" d'hibernate pour le coup.

    Il semble que la DTD définie l'ordre suivant meta*,column*,type?,generator? pour l'élément ID

    Donc, si tu remplaces dans ton fichier Identification.hbm.xml, l'élément id par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <id name="idUser">
     <column name="idUser"/>
     <generator class="increment"/>
    </id>
    Je pense que ça passera ton problème actuel

  7. #7
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Citation Envoyé par zorm Voir le message
    Bonjour,

    L'erreur est située au niveau du parsing xml et est "indépendante" d'hibernate pour le coup.

    Il semble que la DTD définie l'ordre suivant meta*,column*,type?,generator? pour l'élément ID

    Donc, si tu remplaces dans ton fichier Identification.hbm.xml, l'élément id par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <id name="idUser">
     <column name="idUser"/>
     <generator class="increment"/>
    </id>
    Je pense que ça passera ton problème actuel
    Merci beaucoup, ça fonctionne. Bizarre qu'il ne prends pas dans n'importe quel ordre.

    Bon par contre je retombe sur une erreur. Est ce que tu pourrais m'en dire plus :

    Initial SessionFactory creation failed.org.hibernate.MappingException: Could not format discriminator value to SQL string
    Personnellement, je commence à déprimer car je vais d'erreur en erreur.

  8. #8
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Re,

    Je pense que ton problème vient de
    <discriminator column="sousclasse" type="character"/>
    Je vois pas trop à quoi ça te sert ici mais par défaut la classe à comme valeur de discriminant son nom (String). Du coup, toi tu lui dis qu'il s'agit d'un character ce qu'il aime pas trop.
    J'ai supprimé la ligne;
    Je suis un tutoriel pour comprendre depuis le départ Hibernate.
    Du coup, je me fais plusieurs exemples.

    Enfin, du coup, sa marche ( et encore une fois merci beaucoup).
    Mais sa n'enregistre pas dans la base de donnée. As-tu une idée pourquoi ?

  9. #9
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Re,

    J'ai supprimé la ligne;
    Je suis un tutoriel pour comprendre depuis le départ Hibernate.
    Du coup, je me fais plusieurs exemples.

    Enfin, du coup, sa marche ( sans erreur cette fois ci, une première. Et encore une fois merci beaucoup).
    Mais sa n'enregistre pas dans la base de donnée. As-tu une idée pourquoi ?

  10. #10
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Oui, remplir les beans n'implique pas la persistance de ces derniers, il te manque donc une étape dans ton process.

    Tu auras des explications plus précises directement dans la doc par contre car il y a plusieurs aspects qui peuvent etre pris en compte concernant la sauvegarde: aqui

    Bonne continuation

  11. #11
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Arf désolé, merci beaucoup.
    Je l'avais fais pour exemple simple.
    Faire une pause c'est important je crois
    Je pense que tout va runner après,

    Merci beaucoup et bonne continuation à toi aussi,

  12. #12
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Bonsoir,

    Je reviens avec une nouvelle erreur, qui m'evite de pouvoir parvenir à la fin de la persistance de mes objets.

    Une erreur revient par répétition :
    Hibernate: select max(idUser) from Personn
    Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList
    at org.hibernate.type.SetType.wrap(SetType.java:39)
    at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:84)
    at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:51)
    at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
    at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:98)
    at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
    at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:371)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:273)
    Auriez-vous une idée ?

    Merci d'avance,

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

Discussions similaires

  1. [Mapping] Erreur lors du mapping one-to-many
    Par nifertari18 dans le forum Hibernate
    Réponses: 2
    Dernier message: 21/05/2013, 21h15
  2. Problème lors d'un delete avec une relation one-to-many
    Par el_harrathi dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 01/11/2011, 15h01
  3. Réponses: 1
    Dernier message: 05/10/2011, 14h47
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

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