Ошибка в моем запросе гибернации - PullRequest
0 голосов
/ 27 июля 2010

привет, у меня ошибка при выполнении запроса с помощью hibernate

ОШИБКА ast.ErrorCounter (ErrorCounter.java:33) - строка 1:22: ожидается IDENT, найдено '*'

мой дао:

public List rechercheValeurTarifs() throws Exception {
        List tarifs = null;
        try{

            tarifs = getHibernateTemplate().find("SELECT  FE_TARIF_IDF.* " +
                    "FROM FE_TARIF_IDF " +
                    "WHERE FE_TARIF_IDF.D_ANNEE in (SELECT MAX (FE_EXERCICE_FISCAL.D_CEXER) FROM FE_EXERCICE_FISCAL);");

            if(tarifs == null)
            {
                tarifs = getHibernateTemplate().find("SELECT  FE_TARIF_IDF.* " +
                        "FROM FE_TARIF_IDF " +
                        "WHERE FE_TARIF_IDF.D_ANNEE in (SELECT MAX (FE_EXERCICE_FISCAL.D_CEXER-1) FROM FE_EXERCICE_FISCAL);");
            }
        } catch (Exception e){
        System.out.println(e.getStackTrace());
        }
        return tarifs;
    }

мой файл hbm.xml:

<?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="xx.xxx.xxx.persistance.bo" >
    <class name="Tarifs" table="FE_TARIF_IDF" >
            <cache usage="read-write" />
            <composite-id name="idTarif" class="IdTarif">
                <key-property name="annee" type="string" length="4" >
                    <column name="D_ANNE" />
                </key-property>
                <key-property name="zone" type="int" length="1" >
                    <column name="D_NZONE" />
                </key-property>
                <key-property name="typeLocal" type="string" length="1" >
                    <column name="D_CTYPE_LOCAL" />
                </key-property>
            </composite-id>
            <property name="tarifNormal" type="float" column="D_NTARIF_NORMAL" length="7"/>
            <property name="tarifReduit" type="float" column="D_NTARIF_REDUIT" length="7"/>
            <property name="surfaceMin" type="float" column="D_NSURFACEMIN" length="10"/>    
    </class>
</hibernate-mapping>

Ответы [ 2 ]

1 голос
/ 27 июля 2010

попробуйте следующее в вашем дао:

public List rechercheValeurTarifs() throws Exception {
    List tarifs = null;
    try{

        tarifs = getHibernateTemplate().find("FROM FE_TARIF_IDF " +
                "WHERE FE_TARIF_IDF.D_ANNEE in (SELECT MAX (FE_EXERCICE_FISCAL.D_CEXER) FROM FE_EXERCICE_FISCAL);");

        if(tarifs == null)
        {
            tarifs = getHibernateTemplate().find("FROM FE_TARIF_IDF " +
                    "WHERE FE_TARIF_IDF.D_ANNEE in (SELECT MAX (FE_EXERCICE_FISCAL.D_CEXER-1) FROM FE_EXERCICE_FISCAL);");
        }
    } catch (Exception e){
    System.out.println(e.getStackTrace());
    }
    return tarifs;
}

Вам не нужен SELECT, если вы не указываете поля.

0 голосов
/ 27 июля 2010

Предложение select ... является необязательным в HQL, вы можете просто перейти с from Table where...

или использовать псевдоним: select o from Table o where ...

Кроме того, в HQL имена таблиц должны быть замененыс именами классов и столбцом с атрибутами:

tarifs = getHibernateTemplate().find("FROM Tarifs " +
                    "WHERE idTarif.annee in (SELECT MAX (XXX) FROM ExerciceFiscal)");
...