grailsgorm自动更新问题

grailsgorm自动更新问题,grails,gorm,Grails,Gorm,更新帖子: 在控制器中,如果我这样做: def obj = new Test(name:"lol") obj.save(flush:true) obj.name = "lol2" //a singleton service with nothing to do with obj testService.dostuff() /* "obj" gets persisted to the database right her

更新帖子:

在控制器中,如果我这样做:

     def obj = new Test(name:"lol")
     obj.save(flush:true)
     obj.name = "lol2"

     //a singleton service with nothing to do with obj
     testService.dostuff() 
     /*
       "obj" gets persisted to the database right here
       even before the next println
     */
     println "done"
谁能解释一下为什么Grails1.3.7会出现这种情况而Grails2却没有?原因是什么

我知道我可以使用discard并基本上重构代码,但我对幕后发生的事情和原因感兴趣。谢谢

旧职位:

我有一个测试Grails应用程序。我有一个域类测试。测试:

package test

class Test {
   String name
   static constraints = {}
}
我还有一个服务test.TestService:

package test

class TestService {

    static scope = "singleton"
    static transactional = true

    def dostuff() {
        println "test service was called"
    }
}
和一个控制器test.TestController:

package test

class TestController {

  def testService      

  def index = {
     def obj = new Test(name:"lol")
     obj.save(flush:true)
     obj.name = "lol2"
     testService.dostuff()
     println "done"
  }
}
所以我要做的是:

创建域对象 更改它的一个属性 调用单例服务方法 我所期望的是:

除非调用obj.save,否则不会将任何内容持久化到数据库 结果是:

在服务调用之后,Grails将对数据库执行更新查询。 我已尝试从此url进行以下配置:

但这没用

我已经用Grails1.3.7对它进行了测试,Grails2.0.3没有这个问题

有没有人能告诉我更多的情况,到底发生了什么?由于服务调用,并且由于对象脏,当前会话似乎必须终止。在服务调用之后,该对象将自动持久化到数据库中。我不明白的是,即使在Hibernate中配置手动刷新模式也没有帮助


提前谢谢

我不确定你链接的那条让你觉得有用的线索是什么。他们都说这行不通,创建的票证已经关闭,无法修复。这里的解决方案是按照线程所述使用discard。

@Gregg-对,在save调用之后和更改任何内容之前调用discard。你应该在其他人之前将你的评论转换成答案:@BurtBeckwith我已经更新了帖子,你能看一下吗?谢谢是的,事实上,我只是在任何人指向该页面之前添加了一条评论。我真正的问题是save是在服务调用之后执行的,我不能使用discard。
hibernate.flush.mode="manual"