1

为什么“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.findAll {
   or {
      name == "A"
      name ==~ "%A" 
   }
}.collect { it.name }

生成相同的列表:

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

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

这段代码有问题吗?

谢谢!

4

1 回答 1

1

在标准中使用常规布尔运算符,例如:

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

Student.findAll {
    name == "A" || name ==~ "%A" 
}.collect { it.name }
于 2013-02-06T16:27:29.917 回答