2013-12-12 33 views
4

編寫尋找等於0或爲空的標誌的Grails動態查找程序的最佳方法是什麼?如何編寫尋找0或null的grails動態查找程序

class Book { 
    String title 
    Date releaseDate 
    String author 
    Boolean paperback 
    Integer isArchived 
} 

的isArchived可爲空。所以這個查詢要麼是尋找isArchived = 0,要麼它是null,它也希望它在結果中。

編輯:乍一看這個問題就像我甚至沒有嘗試,並沒有瀏覽文檔。我向你保證,我一直在研究和嘗試許多不同的事情。

另外,是的,數據庫中的布爾標誌不應爲空,但在此時無法更改表。在這種情況下,開發人員依靠在域對象中默認設置標誌的值爲0。雖然這在大多數情況下都有效,但某些情況下標誌被設置爲空。

我已經嘗試了許多不同的方法來做到這一點使用動態查找器,但它似乎有兩個相同的列在動態查找器是不可能的。

我會接受答案,「不,這是不可能的使用動態查找器只使用createCriteria()方法。」我只是想知道這是不可能的。

+0

看不到有任何理由來downvote這個問題,這是明確的,可以是有用的。 – lukelazarovic

+1

@anataliocs - 冷靜一點。如果您已經將編輯後的問題中的信息放在開頭,那麼您會收到更好的反饋。更好的問題會得到更好的答案,通常歸結爲更多細節。 – Gregg

+0

我很抱歉,剛開始的問題看起來很簡單,但令人沮喪。我試圖添加更多的細節來更好地構建我的問題。 – anataliocs

回答

3

你可以使用其中的功能,如果你使用的Grails的版本支持:

def results = Book.where { 
    (isArchived == null || isArchived == 0) 
} 

你也可以使用HQL:

Book.findAll("from book b where b.isArchived IS NULL or b.isArchived = 0") 
+1

您可以使用Groovy的真相併編寫'Book.where {!isArchived}'嗎? – doelleri

+0

@doelleri - 很好的建議,可能。 – Gregg

+1

爲了更好地說出我的問題,最佳做法是什麼?既然它看起來像一個簡單的查詢,我想使用動態查找器,但我對任何東西都是開放的。 – anataliocs