更新的帖子:的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 here
even before the next println
*/
println "done"
誰能請解釋我爲什麼會這樣使用Grails 1.3.7,而不是使用Grails 2?是什麼原因?
我知道我可以使用discard(),基本上重構代碼,但我對後臺發生的事情和原因感興趣。謝謝!
舊文章:
我有一個測試Grails應用程序。我有一個域類test.Test:
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將對數據庫執行更新查詢。
我曾嘗試以下配置從這個網址: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沒有這個問題。
任何人都可以請給我一些關於究竟發生了什麼的更多信息嗎?看起來當前會話必須由於服務調用而被終止,並且由於對象是髒的,它在服務調用之後會自動保持到數據庫。我不明白,即使在Hibernate中手動刷新模式配置也沒有幫助。
在此先感謝!
@Gregg - 在save()調用之後和更改任何內容之前調用discard()。您應該在別人之前將您的評論轉換爲答案:) – 2012-07-18 20:06:29
@BurtBeckwith我已更新該帖子,可否請您看看?謝謝! – Aston 2012-07-19 11:09:13