2011-08-30 64 views
0

的如何使用個createCriteria方法,用於我的Grails應用程序中獲取數據一個非常簡化的例子:的NullPointerException和/或在標準

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

如果您刪除'或{}'附近的條件,它會工作嗎? –

+0

我猜想要麼它不是真正的NPE(我喜歡Groovy,但有時堆棧跟蹤不是最有用的東西),或者NPE來自if語句而不是或{}。 +1爲Rob Hruska的建議嘗試刪除條件和回報... – proflux

+0

我已經調查了更多,並發現你不能指出問題,因爲它是在我沒有顯示的代碼。我會用新的發現來更新我的問題。 – Aidas

回答

1

問題是「owner」是Groovy中的保留字。這在Groovy Closures中描述。 你可以試着將圍繞 '所有者' 單引號,這樣你的代碼行應爲:

如果(! '所有者'= NULL & &「owner'.size()> 0){

可能工作。您最好的選擇是使用新的變量名稱以避免混淆。