2017-01-08 45 views
0

我有一個動作修改和實例,然後鏈接到另一個動作。如果實例上有錯誤,我想忽略所做的更改。但是,discard()方法不起作用。狀態更改始終保持不變。我究竟做錯了什麼?grails hiberate discard()被忽略

def reject={ 

     def notice=Notice.get(params['id']); 
     if(!notice){ 
      flash.message="Could Not Find Notice With ID:"+params.id; 
      redirect(action:'list'); 
      return; 
     } 
     flash.messages=[:]; 
     flash.errors=[:]; 
     notice.status=NoticeType.REJECTED; 
     if(!notice.hasErrors() && notice.save(flush:true)){ 
       //success message 
       flash.messages.notice_tab=["Notice Was Successfully Flagged As Rejected"]; 
      } 
     } 
     else{ 
      //error message 
       flash.errors.notice_tab=[]; 
      notice.errors.allErrors.each{ 
       flash.errors.notice_tab.push(it); 
      } 
      notice.discard(); //THIS DOES NOTHING???? 
     } 


     chain(action:'edit', id:params['id']) 
     return; 
    } 

我也試過notice.refresh()來設置值返回到原來的。沒關係。依然堅持我設定的新價值。我改變了鏈條重定向,發生了同樣的事情。

回答

1

一個解決方案是使用命令對象而不是域對象。然後,一旦在您的命令對象上成功完成驗證,就可以將值複製到域對象,然後保存以避免Hibernate丟棄。