2012-07-11 78 views
0

我有一個產品領域:使用findBy具有相同的屬性,但多個值

Product { 
    String name 
} 

現在我需要issuedProductInstancerequestedProductInstance。爲此,我使用了findBy作爲

def find(String issuedProduct,String requestedProduct){ 
    Product issuedProductInstance=Product.findByName(issuedProduct) 
    Product requestedProductInstance=Product.findByName(requestedProduct) 
} 

以這種方式,該方法命中DB兩次。有沒有什麼辦法可以通過只執行一個查詢來找到兩種產品。

回答

0

不知道Grails的,但你只需要下面的查詢:

select p from Product p where p.name in (:names) 

當然,這種查詢可以返回0,1或2的產品,你必須在列表中迭代知道這是一個以「issuedProduct」作爲名稱,而另一個是。

+0

是的,這將起作用。我們可以把它寫成Product.findAllByNameInList([issuedProduct,requestedProduct])。但是,我想要在發出ProductInstance或requestedProductInstance爲null時顯示差異錯誤消息,並且此查詢不會返回空對象。 – 2012-07-11 14:50:49

+0

如果它返回一個空列表,那麼它們都不存在。如果它返回一個大小爲1的列表,則其中一個不存在。如果它返回一個大小爲2的列表,則兩者都存在(當然,假設該名稱是唯一的)。 – 2012-07-11 14:55:50

+0

謝謝JB Nizet ... – 2012-07-16 13:47:43

相關問題