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 :

composite-id, HQL => exception


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Par défaut composite-id, HQL => exception
    Quand je lance la requête suivante, j'obtiens une QueryException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM dto.Price AS price WHERE price.company.id=1234 AND price.company.saleoffice.id=1
    Exception in thread "main" org.hibernate.QueryException: could not resolve property: company.id of: dto.Price [FROM dto.Price AS price WHERE price.company.id=1234 AND price.company.saleoffice.id=1]

    En revanche, cette requête équivalente fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM dto.Price AS price JOIN price.company as company WHERE company.id=1234 AND company.saleOffice.id=1
    Son seul désavantage est qu'elle génère une jointure pour recuperer des donnees qui ne me servent pas (ma table price contient deja les champs company_id et sale_office_id)

    Voila les mappings de Price et Company :

    Price
    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
    <class name="dto.Price" table="price">
    	<composite-id>
    		<key-property name="productCode" column="product_code"/>
    		<key-property name="companyId" column="company_id"/>
    		<key-property name="saleOfficeId" column="sale_office_id"/>
    	</composite-id>
    	<many-to-one name="product" class="dto.Product" insert="false" update="false">
    		<column name="product_code"/>
    		<column name="sale_office_id"/>
    	</many-to-one>
    	<many-to-one name="company" class="dto.Company" insert="false" update="false">
    		<column name="company_id"/>
    		<column name="sale_office_id"/>
    	</many-to-one>
    	blablabla...
    </class>
    Company
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <class name="dto.Company" table="company">
    	<cache usage="read-write"/>
    	<composite-id>
    		<key-property name="id" column="id"/>
    		<key-many-to-one name="saleOffice" class="dto.SaleOffice" column="sale_office_id"/>
    	</composite-id>
    	blabla...
    </class>
    Quelqu'un comprend ce qui se passe ? une idée ?

  2. #2
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    as tu essayé quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM dto.Price AS price WHERE price.id.company.id=1234 AND price.id.company.saleoffice.id=1
    de cette maniere, tu regardes dans la clé de ta table, hibernate ne devrait pas chercher plus loin...

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Par défaut
    id est un mot clé réservé en HQL ?

  4. #4
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    oui, ça désigne la clé primaire de l'objet en question

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Par défaut
    Ah tu m'apprends quelque chose de bien là
    Il me semble pas avoir lu ça dans la doc d'hibernate
    Je testerai demain, j'espère que ca va marcher !

  6. #6
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    c'est que tu n'as pas bien lu alors

    cf la doc sur ce sujet

    de plus c'est souvent dans les exemples de requêtes

  7. #7
    Membre averti
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Par défaut
    Bon j'ai résolu mon problème
    J'ai transforme le champ "id" de Company en "code" (Avant id était la seule clé primaire donc il n'y avait pas de problème, mais j'ai du passer a une clé multiple)
    La requête deviens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM dto.Price AS price WHERE price.company.id.code=1234 AND price.company.id.saleoffice.id=1
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. HQL génère une Exception
    Par nader1987 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 31/05/2012, 17h44
  2. Composite id provoque exception
    Par Reno17 dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/03/2010, 15h39
  3. [HQL] Update HQL sur une table avec Id composite
    Par Eccoon dans le forum Hibernate
    Réponses: 5
    Dernier message: 02/04/2007, 12h10
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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