2011-10-12 44 views
7

如何使用GORM .get來檢索對象o修改某些字段並調用o.validate()來查找沒有Hibernate時將對象保存到數據庫的錯誤。丟棄本身並不妨礙保存。同樣沒有修改並驗證grails域對象而不保存它

   clazz.withTransaction { status -> 
        row.validate(flush:false) 
        row.discard() 
        status.setRollbackOnly() 
       } 

This後建議使用一個命令對象,但是這個代碼將適用於許多不同的域對象。必須有一個簡單的方法(傳遞一些參數來驗證?)給Hibernate不保存指令。我是否需要每次都創建一個新實例?

回答

11

如果您使用read()而不是get()來檢索該對象,它將不會在刷新期間(例如在事務或Web請求結束時)自動保存。它不是真正的只讀,因爲你可以調用save(),它會一直存在 - 它不會在骯髒時自動保存。

+0

是不是有必要顯式調用o.save()將對象放入flush隊列中? –

+2

不,連接到被修改的會話的任何實例都將被刷新。唯一需要調用'save()'的時間是針對新實例的。 –

+0

太好了。謝謝 – cardenizen