2013-04-10 127 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

相关问题