grails hiberate discard() 被忽略
grails hiberate discard() being ignored
我有一个动作可以修改和实例化,然后链接到另一个动作。如果实例有错误,我想忽略我所做的更改。但是,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() 将值设置回原始值。没关系。仍然坚持我设定的新价值观。我将链更改为重定向,同样的事情发生了。
一种解决方案是使用命令对象而不是域对象。然后,一旦在您的命令对象上成功完成验证,您就可以将值复制到域对象,然后保存以避免 Hibernate 丢弃。
我有一个动作可以修改和实例化,然后链接到另一个动作。如果实例有错误,我想忽略我所做的更改。但是,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() 将值设置回原始值。没关系。仍然坚持我设定的新价值观。我将链更改为重定向,同样的事情发生了。
一种解决方案是使用命令对象而不是域对象。然后,一旦在您的命令对象上成功完成验证,您就可以将值复制到域对象,然后保存以避免 Hibernate 丢弃。