gorm 批次改值

4 views
Skip to first unread message

derekypp peng

unread,
Dec 18, 2009, 1:43:02 AM12/18/09
to grail...@googlegroups.com
批次改值
我有一個domain 我有欄位要通通更新
相當於SQL:   UPDATE a='new' from CmChildminder


可是轉換成GORM
我先把 CmChildminder.list() 通通帶出來
然後用each 每一個跑一次 然後再save() 這樣跑完 都正常 可是database都沒有改變
  

     def c = CmChildminder.list()
      c.each{             
        
              def x = CmChildminder.get(it.id)             
              x.a = 'new'
              x.save(flush:true)                       
        }

一次改全部,會有問題
可是把我list 換成.get(1)
def c = CmChildminder.get(1)
這樣,數值有正常被改變

請問大家,這樣是什麼問題
我可不想再回到SQL語法組來組去的時代
謝謝大家

361.gif

Tigerf

unread,
Dec 18, 2009, 1:59:45 AM12/18/09
to grailsunion
CmChildminder.executeUpdate("update CmChildminder cc set cc.a=?", ["newValue"]);
这是hql,跟sql 的 update 类似。

另外,如果非要自己循环的话,我觉得应该是
c.each{
    it.a='new'
    it.save(flush:true)
}
没有必要多get一次。


Thanks & Best Regards
Tigerf


2009/12/18 derekypp peng <dere...@gmail.com>

--

您收到此邮件是因为您订阅了 Google 网上论坛的“Grails联盟-GrailsUnion”论坛。
要向此网上论坛发帖,请发送电子邮件至 grail...@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 grailsunion...@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/grailsunion?hl=zh-CN 访问此网上论坛。

361.gif

Liu Chao

unread,
Dec 18, 2009, 10:49:43 PM12/18/09
to grail...@googlegroups.com
这种操作就算用sql有什么不可以?

2009/12/18 Tigerf <tig...@gmail.com>



--
My Grails Powered Website:
http://team.goal98.com

Grails Melody Plugin:
http://www.grails.org/plugin/grails-melody

Grails Templar Poject:
http://code.google.com/p/grails-templar/
361.gif

Alex wang

unread,
Dec 24, 2009, 4:52:49 AM12/24/09
to grail...@googlegroups.com
既然是批量操作还是建议用批量操作语句,提倡Tiger的方法
---------------------------------------------
Alex wang
website:颠覆软件 http://www.foxlog.org
twitter: http://twitter.com/foxlog
douban: http://www.douban.com/people/foxlog
gmail: idea.wang[at]gmail.com


2009/12/19 Liu Chao <liuc...@gmail.com>
361.gif

Tigerf

unread,
Dec 24, 2009, 4:58:53 AM12/24/09
to grailsunion
不建议用sql主要是考虑维护的问题,写sql必须很准确的知道mapping的细节,尤其是涉及到对象关系的时候会很麻烦。万一将来有些改动要修改相关的sql是比较吃力的。
在批量操作方面,hql能达到跟sql一样好的效率,而且hql阅读起来与OO的设计是一致的,并且比sql跟简洁(hibernate手册中有几个很好的对比)。


Thanks & Best Regards
Tigerf


2009/12/19 Liu Chao <liuc...@gmail.com>
361.gif

Liu Chao

unread,
Dec 24, 2009, 5:02:35 AM12/24/09
to grail...@googlegroups.com
恩,看具体情况吧。不过一般这种修补动作应该是直接进数据库跑sql吧,写段程序跑HQL就小题大做了。

2009/12/24 Tigerf <tig...@gmail.com>
361.gif

Tigerf

unread,
Dec 24, 2009, 5:06:52 AM12/24/09
to grailsunion
是的,只是一次性的操作还是直接连上去写sql方便。尤其是因为domain结构要改动的话,根本就不能用hql,只能用sql先把表和数据改好。


Thanks & Best Regards
Tigerf


2009/12/24 Liu Chao <liuc...@gmail.com>
361.gif
Reply all
Reply to author
Forward
0 new messages