如何更新grails域对象列表中的属性?

时间:2013-04-10 16:57:24

标签: grails grails-2.0 grails-domain-class

我有一个域类对象列表:

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

现在我要更新此列表中所有图书中的“可用”属性。通常,我会这样做

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

有没有更好的方法呢?我应该在一次交易中做到吗?像:

Book.withTransaction { ... }

1 个答案:

答案 0 :(得分: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)"