2014-11-24 43 views
0

例如,我需要在表中检索多个寄存器并编辑一个字段,但是用循环保存所需时间太长,是否存在一个更好的保存方法? 该怎么办呢....如何在Grails中同时保存一个集合

class Table 

    static mapping = { 
     table "TABLEEX" 
     id generator:'sequence', params:[sequence:'TABLEEX_SEQ'] 
    } 

    // identificacion 
    String data1 
    String data2 
} 

和搜索数据:

def stuff = Table.createCriteria().list{ 
    eq("data1","1") 
} 

与编辑和保存

stuff.each { 
    it.data2 = "aaa" 
    it.save() 
} 
+1

使用'where'查询将允许你这样做未做一堆往返于数据库。请参阅下面的答案。 – 2014-11-24 16:10:50

回答

5

不清楚为什么你要检索的对象开始。像这样的东西你在找什么?

Table.executeUpdate("update Table t set t.data2=:newData where t.data1=:oldData", [newData: 'BAR', oldData: 'FOO']) 

编辑

你也可以做这样的事情...

def query = Table.where { 
    data1 == 'FOO' 
} 
int total = query.updateAll(data2:'BAR') 
+0

它支持'喜欢'吗? – user1698253 2014-11-24 16:37:29

+0

我找到了!谢谢 myString =〜“myString%” – user1698253 2014-11-24 16:39:17

+2

对。 “where”查询确实是要走的路。我首先编写HQL示例的唯一原因是我对另一个答案中的评论感到惊讶,这个答案断言Hibernate不会在没有遍历所有对象的情况下支持它。 HQL示例可以工作,但有很多原因,where查询是一个更好的主意。很高兴帮助! – 2014-11-24 17:25:46

-2

休眠(GORM的底层机制,Grails的orm)不支持。 你必须遍历每一个元素并自己保存或实现(并且这样做不会更快)。

+0

:(谢谢,grails很好,但有时候它太慢了,我不得不打电话给外部脚本,谢谢! – user1698253 2014-11-24 15:50:18

+0

Hibernate确实支持更新,而不必检索所有的实例并迭代它们,我想你可以使用executeUpdate,所以所有的真正的工作发生在数据库而不是应用程序 – 2014-11-24 16:03:00

+1

我认为使用'where'查询比编写外部脚本更好。 – 2014-11-24 16:11:28

相关问题