2012-08-01 57 views
1

我很少用使用的executeQuery在查詢,因爲有時我得到這個錯誤,我不知道如何解決它,這是我的代碼:的Grails的executeQuery HQL - 無法找到參數

use(TimeCategory) { 
     def referenceDate = new Date() - 101.year 
     println '============================= '+referenceDate 
      def cancelledSlots = RegistrantTestingCenterExamSchedule.executeQuery("""select rt.registrant.emailAddress from RegistrantTestingCenterExamSchedule as rt 
       where rt.registrant.firstName in(select i.firstName from Individual i) and rt.registrant.lastName in(select i.lastName from Individual i) and 
       rt.registrant.middleName in(select i.middleName from Individual i) and rt.registrant.birthDate in(select i.birthDate from Individual i) or 
       rt.registrant.seniorCitizen = false or rt.registrant.birthDate >=:refDate""",[refDate: referenceDate])    
} 

和我得到了這個錯誤信息: 找不到命名參數[refDate] 我試圖刪除條件,我不需要將其與我聲明的參數進行比較(和rt.registrant.birthDate> =:refdate「,[ refDate:refereneceDate])它的工作。我真的不知道爲什麼我仍然getti ng這個錯誤,似乎我正確地聲明瞭參數,並且傳遞的值參數是有效的,因爲我可以看到它打印在我的終端中。提前致謝。

+0

應該有效。如果你添加一個空格,那麼「'> =:refDate'」? – 2012-08-01 09:49:36

+0

同樣的事情發生, – antibry 2012-08-02 00:53:37

回答

0

根據manual(參見多行查詢部分),三重引用多行字符串不適用於HQL。嘗試使用續行字符:

executeQuery("select rt.registrant.emailAddress \ 
from RegistrantTestingCenterExamSchedule as rt \ 
.... \ 
or rt.registrant.birthDate >= :refDate", [refDate : referenceDate])