为什么“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”记录。
此代码有问题吗?
谢谢!
答案 0 :(得分:1)
在条件中使用常规布尔运算符,例如:
Student.findAll {
name == "A" && name ==~ "%A"
}.collect { it.name }
Student.findAll {
name == "A" || name ==~ "%A"
}.collect { it.name }