Des requêtes HQL à l'aide de HibernateTemplate (Printemps)

C'est mon premier post, donc s'il vous plaît garder avec moi. Je suis en train d'exécuter une requête HQL de l'intérieur d'une méthode à l'aide de HibernateTemplate. La raison pour laquelle je suis en train de faire de cette façon est parce que le tableau a beaucoup plus de colonnes, mais je ne suis intéressé que dans deux. Le résultat de la requête est utilisé dans l'exécution de updateOrSave opération plus tard.

Donc de la structure de classe ressemble à:

class XYZDAO {
   ...
   ...

   public void createReview(....) {
      ...
      ...
      class Temp {
        private final float rating;
        private final int count;

        @SuppressWarnings("unused")
        public Temp(float rating, int count)
        {
            this.rating = rating;
            this.count = count;
        }
        public float getRating()
        {
            return rating;
        }
        public int getCount()
        {
            return count;
        }          
      }
      List<Temp> avgRatingWrapper = getHibernateTemplate().find("SELECT new Temp(AVG(RATING), COUNT(*)) FROM RATINGS WHERE ADVENTURE_ID = ?", Integer.parseInt(adventureId));
      ...
      ...
   }
}

Lorsque j'exécute le code suivant exception se produit:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: RATINGS is not mapped [SELECT new Temp(AVG(RATING), COUNT(*)) FROM RATINGS WHERE ADVENTURE_ID = ?]

J'ai déjà plein soufflé de mapping hibernate mapping pour le tableau des indices:

<hibernate-mapping>
    <class name="com.xyz.abc.dao.hibernate.Ratings" table="ADV_ADMN.RATINGS">
        <id name="id" type="int" column="ID">
            <generator class="seqhilo">
                <param name="sequence">ADV_ADMN.RATINGS_ID_SEQ</param>
                <param name="allocationSize">1</param>
            </generator>
        </id>
        <version name="timestamp" type="timestamp">
            <column name="TIMESTAMP" length="19" not-null="true" />
        </version>
        <property name="adventureId" type="int">
            <column name="ADVENTURE_ID" not-null="true" />
        </property>
        <property name="reviewer" type="string">
            <column name="REVIEWER" length="45" not-null="true" />
        </property>
        <property name="rating" type="java.lang.Float">
            <column name="RATING" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

Maintenant, je comprends que j'ai besoin pour effectuer une sorte de cartographie soit dans le hibernate.hbm.xml fichiers ou de fournir de l'annotation pour le Temp de classe de la carte de la notation de la table. Je me demandais si il existe un autre moyen de contourner le problème. J'ai pensé que si vous utilisez de la Session.createSqlQuery(....) ensuite, vous pouvez ajouter des entités qui peut permettre de contourner le problème. Mais je ne suis pas sûr qu'il existe un moyen de le faire HibernateTemplate.

Toute aide/les pointeurs sont grandement appréciés.

InformationsquelleAutor n00bc0der | 2012-04-12