2013-04-10 67 views
2

我有域類對象的列表:如何更新grails域對象列表上的屬性?

def books = Books.findAllByTitleLike("%Hobbit%") 

現在我要更新這個列表中的所有書籍的財產「可用」。通常,我會做

books.each { 
    it.available = false; 
    it.save() 
} 

有沒有更好的方法來做到這一點?我應該在一次交易中完成嗎?像:

Book.withTransaction { ... } 

回答

3

您可以通過executeUpdate

def updatedRecords = Book.executeUpdate("update Book set available = 'false' where title like'%Hobbit%' ") 

每註釋中使用批量更新: 其HQL和SQL類似。

這是另一種方式,你可以做到這一點(內查詢):

def sql = """update Domain 
set $fieldName = '$fieldValue' 
where id in (select id from Domain1 where seqId = '$myid')""" 
def updatedRecords = Domain.executeUpdate(sql) 

或者 東西在這條線:

"... where id in ('123','132','111') 

我沒有測試過這一點,但你也許可以說

def list= ['123','132','111'] 
" ... where id in ($list)" 
+0

我更新了書籍列表,因爲我不想更新所有布魯克斯,但只有幾個。那麼,我該如何將這些書籍列表傳遞給您的查詢? – confile 2013-04-10 21:31:30

+0

您可以將where子句添加到查詢字符串中。像「其中x = 1或x = 2」就像這樣。你甚至可以使用inList,不確定inlist是否適用,但你可以試試它。但一般來說,您可以靈活地構建自己的查詢sql。 – Alidad 2013-04-10 21:41:53

+0

只是注意到你更新了你的問題,你應該也可以使用。我對我的答案進行了修改,看它是否有效。 – Alidad 2013-04-10 22:05:41

相關問題