如果我在我的Grails命令對象中使用GORM域對象,命令對象會自動提交對域對象的更改,即使我沒有調用save()方法。默認情況下,Grails命令對象爲什麼會提交對域對象的更改?
我想綁定到命令對象中的GORM對象,但不保存或提交對數據庫的更改。如果我的控制器或我的服務引發異常,我希望事務回滾。
我可以用下面的註釋強制我想要的行爲,但那感覺就像我在做這個艱難的方式。
Controller Class = @Transactional(readOnly = true)
Controller action method = @Transactional
Command Object Class = @Transactional(readOnly = true)
Service Class = @Transactional
我做錯了什麼,Grails域對象是否應該由命令對象自動提交,除非我添加所有這些註釋?
但我所看到的是綁定在命令對象中的對象隱式地在命令對象之後和控制器動作的第一行之前提交,而不是在動作結束之後提交。除非我如上所述註釋,否則我似乎在命令對象中獲得一個事務,並在該操作中獲得另一個事務。 – DAC
你可以創建一個小型測試應用程序來演示這個嗎?我想看看,所以如果你可以在Github或其他在線repo上做些工作,甚至可以將代碼壓縮並通過電子郵件發送給我,我希望能夠追蹤到這一點。如果這是一個真正的bug,那麼報告它會很好。 –
行,找到了!演示應用程序沒有相同的行爲。事實證明,我們通過在命令對象中注入一個UtilService來幫助驗證,從而導致了這個問題。該服務是**沒有註釋@Transactional(readOnly = true)',所以使用它開始了一個事務並返回到提交該事務的控制器操作。註釋UtilService'@Transactional(readOnly = true)'解決了這個問題。 – DAC