为什么“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”。
这段代码有问题吗?
谢谢!