2012-08-01 30 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])