我需要根据某些属性阻止或取消域对象的保存。 这可以在约束中完成吗?
实施例: “订单”域对象的状态为“已开票”,则订单不应再次更新..
有关如何解决此问题的任何建议吗?
答案 0 :(得分:2)
我认为没有理由不能简单地使用约束(如你所建议的那样)。像这样的东西应该这样做
class Order {
String state
static constraints = {
state(validator: {stateValue, self ->
// only check state if this object has already been saved
if (self.id && stateValue == 'invoiced') {
return false
}
})
}
}
如果由于某种原因你不能使用约束,这里有几个替代建议:
使用Groovy的方法拦截功能拦截对save()
的调用。如果订单没有开票状态,您的拦截器应该只将调用转发给截获的save()
。
GORM提供了在持久对象生命周期中触发的许多events。在beforeUpdate
或beforeValidate
事件中可能有可能阻止更新对象(我想抛出异常会起作用)