gpt4 book ai didi

grails - Grails GORM自动更新问题

转载 作者:行者123 更新时间:2023-12-02 14:54:42 29 4
gpt4 key购买 nike

更新后的帖子:

在 Controller 中,如果我这样做:

     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"

谁能解释一下为什么Grails 1.3.7而不是Grails 2会发生这种情况?是什么原因?

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

旧帖子:

我有一个测试Grails应用程序。我有一个域类test.Test:
package test

class Test {
String name
static constraints = {}
}

我也有一个服务测试.TestService:
package test

class TestService {

static scope = "singleton"
static transactional = true

def dostuff() {
println "test service was called"
}
}

还有一个 Controller 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进行以下配置: http://grails.1312388.n4.nabble.com/Turn-off-autosave-in-gorm-td1378113.html
    hibernate.flush.mode="manual"

    但这没有帮助。

    我已经用Grails 1.3.7进行了测试,Grails 2.0.3没有这个问题。

    有人可以给我更多有关发生了什么的信息吗?似乎由于服务调用而必须终止当前 session ,并且由于对象脏了,因此在服务调用之后该对象将自动持久化到数据库中。我不了解的是,即使使用Hibernate中的手动刷新模式配置也无济于事。

    提前致谢!

    最佳答案

    我不确定链接到的线程会导致您认为它会起作用。他们都说这行不通,创建的票已关闭,无法修复。这里的解决方案是使用discard()作为所述线程。

    关于grails - Grails GORM自动更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546269/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com