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 :

Hibernate, Spring : findByCriteria => org.hibernate.QueryException : could not resolve property


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Hibernate, Spring : findByCriteria => org.hibernate.QueryException : could not resolve property
    bonjour,

    J'ai défini une classe Interventions qui a une relation many-to-one avec une classe Configuration et une seconde avec une classe Equipe. La classe Configuration a quant à elle une relation many-to-one avec une classe Periode.

    Voici le descriptif de mes classes:

    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
     
    Class Interventions {
     
    	Configuration configuration;
    	Equipe equipe;
    	...
    }
     
    Class Configuration {
     
    	Periode periode;
    	...
    }
     
    Class Equipe {
     
    	String codeEquipe;
    	...
    }
     
    Class Periode {
     
    	int mois;
    	int annee;
    	...
    }
    Tous les accesseurs et les mutateurs de mes classes apparaissent comme bien définis.

    Je souhaiterais récupérer les objets Interventions associés à une période donnée et à une equipe donnée

    j'ai défini une requête ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DetachedCriteria criteria = DetachedCriteria.forClass(Interventions.class)
    	.setFetchMode("equipe”,FetchMode.JOIN)
    	.setFetchMode("configuration”,FetchMode.JOIN)
    	.setFetchMode("configuration.periode”,FetchMode.JOIN)
    	.add(Restrictions.eq("equipe", monEqu))
    	.add(Restrictions.eq("configuration.periode", maPeriode));
    Je récupère le résultat de mon résultat dans un itérateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Iterator monResultat = getHibernateTemplate().findByCriteria(criteria).iterator();
    A l'exécution de mon code, j'obtiens l'erreur suivante:

    org.hibernate.QueryException : could not resolve property : configuration.periode

    Est-ce que ma requete est mal ecrite?

    PS : Le mapping de mes classes est le suivant:

    fichier Interventions.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping  package="monprojet.bean" 
    					default-lazy="true"
    					default-cascade="none">
      <class  optimistic-lock="version" table="INTERVENTION_INTV" name="Interventions">
        <id unsaved-value="null" 
        	name="id" 
        	type="java.lang.Long" 
        	column="intv_ID">
          <generator class="native">
          	<param name="sequence">intv_ID_SEQUENCE</param>
          </generator>
        </id>
     
      <version column="VERSION" generated="never" name="version" type="integer"/>
     
      <property column="VALEUR1" generated="never" lazy="false"
       name="nbJoursAgents" type="java.math.BigDecimal"/>
      <property column="VALEUR2" generated="never" lazy="false"
       name="nbJoursIntervention" type="java.math.BigDecimal"/>
      <property column="VALEUR3" generated="never" lazy="false"
       name="nbTotalInterventions" type="java.math.BigDecimal"/>
      <property column="VALEUR4" generated="never" lazy="false"
       name="delaiMoyenIntervention" type="java.math.BigDecimal"/>
      <property column="VALEUR5" generated="never" lazy="false"
       name="tpsTransportTotalJours" type="java.math.BigDecimal"/>
      <many-to-one class="Equipe" column="Equipe_ID" foreign-key="FK_INTV_Equipe"
       name="Equipe" not-null="true"/>
      <many-to-one name="configuration" class="monprojet.bean.Configuration" foreign-key="FK_INTV_CONF" lazy="false">
        <column name="CONF_ID" not-null="true"/>
      </many-to-one>
     </class>
    </hibernate-mapping>
    fichier Configuration.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
    19
    20
    21
    22
    23
    24
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="monprojet.bean">
     <class name="Configuration" table="CONFIGURATION_CONF">
      <id column="CONF_ID" name="id" type="java.lang.Long">
       <generator class="native">
        <param name="sequence">CONF_ID_SEQUENCE</param>
       </generator>
      </id>
      <natural-id mutable="true">
       <property column="UIDUTILISATEUR" generated="never" lazy="false"
        name="uidUtilisateur" type="java.lang.String"/>
      </natural-id>
      <version column="VERSION" generated="never" name="version" type="integer"/>
      <property column="DATESAISIE" generated="never" lazy="false"
        name="dateSaisie" type="java.util.Calendar"/>
      <many-to-one column="CSI_ID" class="Csi" name="csi" not-null="true" foreign-key="FK_CONF_CSI" />
      <many-to-one name="periode" class="Periode" foreign-key="FK_CONF_PERIODE" lazy="false">
        <column name="PERI_ID" not-null="true"/>
      </many-to-one>
     </class>
    </hibernate-mapping>
    fichier Equipe.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping  package="monprojet.bean" 
    					default-lazy="true"
    					default-cascade="none">
      <class  optimistic-lock="version" table="Equipe_Equipe" name="Equipe">
        <id unsaved-value="null" 
        	name="id" 
        	type="java.lang.Long" 
        	column="Equipe_ID">
          <generator class="native">
          	<param name="sequence">Equipe_ID_SEQUENCE</param>
          </generator>
        </id>
        <natural-id mutable="true">
       		 <property  name="codeEquipe" 
                        column="Equipe" 
                        type="java.lang.String"/>
        </natural-id>
        <version name="version" 
       			column="VERSION" 
       			type="integer"/>
        <many-to-one column="CSI_ID" class="Csi" name="csi" not-null="true" foreign-key="FK_Equipe_CSI" />			
      </class>
    </hibernate-mapping>
    fichier Periode.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
    19
    20
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="monprojet.bean">
     <class name="Periode" table="PERIODE_PERI">
      <id column="PERI_ID" name="id" type="java.lang.Long">
       <generator class="native">
        <param name="sequence">PERI_ID_SEQUENCE</param>
       </generator>
      </id>
      <natural-id mutable="true">
       <property column="MOIS" generated="never" lazy="false"
        name="mois" type="java.lang.Short"/>
       <property column="ANNEE" generated="never" lazy="false"
        name="annee" type="java.lang.Short"/>
      </natural-id>
      <version column="VERSION" generated="never" name="version" type="integer"/>
     </class>
    </hibernate-mapping>
    Je souhaiterais de plus trouver un manuel de référence pour l'écriture des criterias avec le maximum d'exemples. Quelqu'un aurait-il des recommandations ( je sais, j'en demande beaucoup )...

    Merci pour votre réponse.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Hélas et pour une raison mystérieuse, les Criteria ne permettent pas un accès direct aux sous-propriétés.
    Il faut créer un alias (ce qui peut devenir pénible, et fonctionne mal avec des clés composites sur de vieilles versions d'hibernate) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DetachedCriteria criteria = DetachedCriteria.forClass(Interventions.class)
            .createAlias("configuration","cfg")
    	.setFetchMode("equipe",FetchMode.JOIN)
    	.setFetchMode("configuration",FetchMode.JOIN)
    	.setFetchMode("configuration.periode",FetchMode.JOIN)
    	.add(Restrictions.eq("equipe", monEqu))
    	.add(Restrictions.eq("cfg.periode", maPeriode));
    Edit : guillemets qui me perturbaient !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/10/2012, 10h06
  2. [Liferay] exception: org.hibernate.QueryException: could not resolve property
    Par lamis2009 dans le forum Portails
    Réponses: 2
    Dernier message: 11/06/2010, 11h13
  3. hibernate.QueryException: could not resolve property
    Par g56589 dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/01/2008, 23h45
  4. [Hibernate] "could not resolve property" sur un tri
    Par Gorou dans le forum Hibernate
    Réponses: 1
    Dernier message: 13/07/2007, 12h27
  5. could not resolve property
    Par *alexandre* dans le forum Hibernate
    Réponses: 1
    Dernier message: 30/10/2006, 13h44

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