使用“和”和“或”子句时,Grails中的findAll()方法行为不正常

时间:2013-02-06 16:15:37

标签: grails closures findall

为什么“and”和“or”子句在grails中的findAll()方法中不起作用?

例如,这段代码:

Student.findAll {
   and {
      name == "A"
      name ==~ "%A" 
   }
}.collect { it.name }

将生成列表:

['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ']

这是错误的。它应该没有产生任何东西。没有记录匹配具有确切名称“A”和结尾“A”的条件。显示的字符串列出了Student表中的所有记录。

情况变得更糟。这段代码:

Student.findAll {
   or {
      name == "A"
      name ==~ "%A" 
   }
}.collect { it.name }

生成相同的列表:

['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ']

实际上应该只返回“AA”记录。

此代码有问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

在条件中使用常规布尔运算符,例如:

Student.findAll {
    name == "A" && name ==~ "%A" 
}.collect { it.name }

Student.findAll {
    name == "A" || name ==~ "%A" 
}.collect { it.name }