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 :

Pb avec composite-id


Sujet :

Hibernate Java

  1. #1
    Membre confirmé Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Par défaut Pb avec composite-id
    Salut,
    Ch'uis encore en train de torturer Hibernate (il me le rends bien ).
    Vala, j'ai un objet commande qui est composé d'un set de lignes, jusqu'ici, ça va. Pour faire simple, j'ai d'abord mappé mes lignes avec une clé primaire simple (un peu bidon) mais en fait, la ligne a une cle composite (commande_id+article_id), je voudrais donc déclarer un element composite-id mais là, ça marche plus, pourtant il me semblait avoir suivi la doc
    J'ai l'exception : "Could not read mappings from resource: table/Ligne.hbm.xml"
    Ligne.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
    <hibernate-mapping>
    	<class name="table.Ligne" table="ligne">
    		<composite-id >
    			<key-property name="article_id" />
    			<key-property name="commande_id" />
    		</composite-id>
    		...
    		<many-to-one name="article" class="table.Article"
    			column="article_id" />
    		<many-to-one name="commande" class="table.Commande"
    			column="commande_id" />
    	</class>
    </hibernate-mapping>
    Et Commande.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
    <hibernate-mapping>
        <class name="table.Commande" 
               table="commande">
            <id name="id" type="int" unsaved-value="0">
                <column name="id" sql-type="int(11)" 
                        not-null="true"/>
                <generator class="increment"/>
            </id>
            ...
            <set name="lignes" table="ligne" inverse="true" cascade="all">
            	        	<key> 
            		        	<column name="article_id" />
            		        	<column name="commande_id" />
            	        	</key>
    	        <one-to-many  class="table.Ligne"/>
            	</set>
        </class>
    </hibernate-mapping>
    Vala, si une bonne âme peut me venir en aide...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Par défaut
    dans ton mapping tu mets bien le nom de ta colonne dans le key-property ?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <hibernate-mapping>
    	<class name="table.Ligne" table="ligne">
    		<composite-id >
    			<key-property name="article_id" />
                               <column name="ID_ARTICLE" scale="" precision=""       not-null="true" sql-type="varchar" />
                           </key-property>
    			...
    </hibernate-mapping>

  3. #3
    Membre chevronné

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Par défaut
    As-tu un peu plus de détail dans l'erreur généré (la stack trace)?

  4. #4
    Membre confirmé Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Par défaut
    Citation Envoyé par decksroy
    dans ton mapping tu mets bien le nom de ta colonne dans le key-property ?
    Ben nan, en fait, j'ai repris ce qui est dans la doc hibernate et y a pas le nom de la colonne.
    Citation Envoyé par woodwai
    As-tu un peu plus de détail dans l'erreur généré (la stack trace)?
    La vala (complete!!!) perso, ça m'aide pos des masses :
    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
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    ERROR 2006-11-16 19:54:22,843 [fr.domaine.data.HibernateArticleDAO-line:27]: 
    org.hibernate.MappingException: Could not read mappings from resource: fr/domaine/table/Ligne.hbm.xml
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:485)
    	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1296)
    	at fr.domaine.util.HibernateSessionFactory.<init>(HibernateSessionFactory.java:17)
    	at fr.domaine.util.HibernateSessionFactory.getInstance(HibernateSessionFactory.java:29)
    	at fr.domaine.data.HibernateArticleDAO.<init>(HibernateArticleDAO.java:25)
    	at fr.domaine.data.HibernateDAOFactory.getArticleDAO(HibernateDAOFactory.java:17)
    	at fr.domaine.servlet.Index.doGet(Index.java:34)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    	at fr.domaine.filter.RequestFilter.doFilter(RequestFilter.java:103)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: org.hibernate.PropertyNotFoundException: field not found: article_id
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:97)
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:104)
    	at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:112)
    	at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:89)
    	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:77)
    	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
    	at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2138)
    	at org.hibernate.cfg.HbmBinder.bindComponent(HbmBinder.java:1867)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:1700)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:433)
    	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:347)
    	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:282)
    	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:153)
    	at org.hibernate.cfg.Configuration.add(Configuration.java:386)
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
    	... 42 more
    ERROR 2006-11-16 19:54:22,843 [fr.domaine.data.HibernateArticleDAO-line:27]: 
    org.hibernate.MappingException: Could not read mappings from resource: fr/domaine/table/Ligne.hbm.xml
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:485)
    	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1296)
    	at fr.domaine.util.HibernateSessionFactory.<init>(HibernateSessionFactory.java:17)
    	at fr.domaine.util.HibernateSessionFactory.getInstance(HibernateSessionFactory.java:29)
    	at fr.domaine.data.HibernateArticleDAO.<init>(HibernateArticleDAO.java:25)
    	at fr.domaine.data.HibernateDAOFactory.getArticleDAO(HibernateDAOFactory.java:17)
    	at fr.domaine.servlet.Index.doGet(Index.java:34)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    	at fr.domaine.filter.RequestFilter.doFilter(RequestFilter.java:103)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: org.hibernate.PropertyNotFoundException: field not found: article_id
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:97)
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:104)
    	at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:112)
    	at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:89)
    	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:77)
    	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
    	at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2138)
    	at org.hibernate.cfg.HbmBinder.bindComponent(HbmBinder.java:1867)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:1700)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:433)
    	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:347)
    	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:282)
    	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:153)
    	at org.hibernate.cfg.Configuration.add(Configuration.java:386)
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
    	... 42 more
    DEBUG 2006-11-16 19:54:22,859 [fr.domaine.servlet.Index-line:37]: org.hibernate.MappingException: Could not read mappings from resource: fr/domaine/table/Ligne.hbm.xml
    DEBUG 2006-11-16 19:54:22,859 [fr.domaine.servlet.Index-line:37]: org.hibernate.MappingException: Could not read mappings from resource: fr/domaine/table/Ligne.hbm.xml
    Si ça vous aide à m'éclairer...

  5. #5
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    D'apres le trace, l'attribut article_id n'existe pas dans la classe Ligne.
    Est-ce le cas ?

  6. #6
    Membre confirmé Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Par défaut
    Alors, c'est plus compliqué (je crois ).
    En fait, ma classe Ligne correspond à une ligne dans une commande, elle fait donc référence à une commande et à un article.
    Donc, ma classe Ligne contient un objet de type Commande et un objet de type Article, ce sont ces 2 classes qui contiennent les fameux "id" :
    id_article correspond à la propriété id de l'objet article et idem pour la commande. Je pensais que Hibernate allait aller chercher automatiquement la clé primaire (Article et Commande sont "hibernatés" et apparaissent dans le "many-to-one) mais apparemment, 'a marche pos
    J'espere avoir été plus clair

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Par défaut
    Ben nan, en fait, j'ai repris ce qui est dans la doc hibernate et y a pas le nom de la colonne.
    Ben mets la, ça marchera !

  8. #8
    Inactif
    Inscrit en
    Octobre 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2005
    Messages : 150
    Par défaut
    Il ne faut pas le nom de la colonne si tu la défini ailleurs.

Discussions similaires

  1. Mise à jour entité avec composite-id
    Par Gauden dans le forum Hibernate
    Réponses: 0
    Dernier message: 13/08/2009, 11h11
  2. Problème avec Composite-Id (mapping many-to-many))
    Par ammouna24 dans le forum Hibernate
    Réponses: 0
    Dernier message: 07/05/2009, 11h43
  3. Pb avec composition d'une requête SQL : DButils UPDATE
    Par Paloma dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2007, 20h30
  4. Pb avec composite-id!
    Par enjoy dans le forum Hibernate
    Réponses: 8
    Dernier message: 08/02/2007, 10h03
  5. Pb avec composite-id=>Récupérer les noms
    Par enjoy dans le forum JSF
    Réponses: 1
    Dernier message: 01/02/2007, 15h19

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