我使用createCriteria方法在Grails应用程序中获取数据的一个非常简单的示例:
def c = SomeClassOfMine.createCriteria()
def projects = c.list(max: limit, offset: start) {
eq("userId", userId)
if (owner != null && owner.size() > 0) {
ilike("ownerName", owner + "%")
}
if (someParameter && someParameter.size() > 0) {
or {
ne("validated", 1)
ne("validated2", 1)
}
}
order("name", "asc")
}
在或{的行上,我收到没有消息的NullPointerException。我尝试了各种组合,并密切关注各个地方给出的示例,但发现如果我尝试使用和,我也会遇到同样的问题。我知道还有其他方法可以获取数据,但我非常想使用这种方法。我没有弄清楚自己可能出了什么问题,所以...在或 / 和上的代码块中可能导致NullPointerException?
如果我知道在这种情况下相关的内容,我会提供更多信息。
编辑:在代码示例中添加了一个if子句(其中检查了所有者)。
我进行了更多调查,发现问题出在if (owner != null && owner.size() > 0) {
,更具体地说,变量名为owner
。当我将名称更改为其他任何问题时,问题就消失了。如果有人可以解释为什么会这样,那将是非常有趣的。
答案 0 :(得分:1)
问题是“所有者”是Groovy中的保留字。这在Groovy Closures中有所描述。 您可以尝试在“所有者”周围放置单引号,以便您的代码行显示为:
if('owner'!= null&&'owner'.size()> 0){
可能有效。您最好的选择是使用新的变量名称以避免混淆。