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

时间:2011-08-30 07:44:58

标签: 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) {
            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。当我将名称更改为其他任何问题时,问题就消失了。如果有人可以解释为什么会这样,那将是非常有趣的。

1 个答案:

答案 0 :(得分:1)

问题是“所有者”是Groovy中的保留字。这在Groovy Closures中有所描述。 您可以尝试在“所有者”周围放置单引号,以便您的代码行显示为:

  

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

可能有效。您最好的选择是使用新的变量名称以避免混淆。