0
我遷移到Grails的3.1.15(休眠4),發現我的一些控制器動作不工作了。對象不堅持,沒有從Grails的2.4.5(休眠3)錯誤
我有以下行爲(簡體)
def create() {
def myDomainObject = myDomainservice.getDefault()
if (myDomainObject.validate()) {
myDomainObject.save()
render 'OK'
} else {
render 'WRONG'
}
}
這個動作的Grails 2.工作得很好,當確認沒有返回錯誤的對象被創建。
在Grails的3然而,這是不正確的了。該動作調用沒有錯誤地執行,但該對象不存儲在數據庫中(然而,分配了ID)。
經過一些故障排除後,我得出結論,稱validate()
忽略save()
(validate()沒有檢測到任何問題)。
添加@Transactional
或明確沖洗save(flush:true)
解決了這個問題。
我能夠恢復舊的行爲嗎?
我檢查了hibernate.flush.mode = AUTO
和它的兩個版本是相同的。
因爲您的控制器操作不是事務性的。嘗試移動它的服務或添加MyObject.withTransaction {//做些事情}。我必須說,這似乎是所有的倒退,因爲你正在調用服務來獲取東西,然後保存在控制器哈哈滑稽 – Vahid