2010-07-27 6 views
0

Привет у меня есть ошибки, когда я выполнить запрос с 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> 

ответ

1

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

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

Работа, но теперь у меня есть ошибка, например FE_TARIF_IDF не отображается – Mercer

+0

Это означает, что поле «FE_TARIF_IDF» не находится в вашем спящем отображении. Не забудьте проверить, есть ли он в верхнем регистре везде (например, fe_tarif_idf! = FE_TARIF_IDF) –

+0

Это также может быть связано с ответом Гийома ниже: в вашем запросе используются имена таблиц и имена столбцов. Hibernate ожидает имена классов и имена переменных (из этих классов). –

0

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)"); 
Смежные вопросы