Hibernate 使用和/或在条件中时出现NullPointerException

Hibernate 使用和/或在条件中时出现NullPointerException,hibernate,grails,criteria,Hibernate,Grails,Criteria,我如何使用createCriteria方法在Grails应用程序中获取数据的一个非常简单的示例: def c = SomeClassOfMine.createCriteria() def projects = c.list(max: limit, offset: start) { eq("userId", userId) if (owner != null && owner.size() > 0) {

我如何使用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子句(其中选中了owner)


我做了更多的调查,发现问题出在
if(owner!=null&&owner.size()>0){
中,更具体地说,变量名
owner
。当我将名称更改为其他名称时,问题就消失了。如果有人能解释为什么会发生这种情况,那将非常有趣。

问题是“owner”是Groovy中的保留字。中介绍了这一点。 您可以尝试在“所有者”周围加上单引号,这样您的代码行将显示:

如果('owner'!=null&&'owner'.size()>0){


可能会起作用。最好的选择是使用一个新的变量名以避免任何混淆。

如果删除
或{}
周围的条件行吗?我猜要么它不是真正的NPE(我喜欢Groovy,但有时堆栈跟踪不是最有用的东西)或者NPE来自if语句,而不是Rob Hruska建议的or{}.+1,尝试删除条件并返回报告…我进行了更多调查,发现您无法指出问题,因为我没有显示代码中的问题。我将用新发现更新我的问题。