我需要基于某些属性来阻止或取消域对象的保存。
可以在约束条件下完成吗?
例:
“订单”域对象的状态为“已开发票”,则该订单将不再能够更新。
关于如何解决这个问题有什么建议吗?
最佳答案
我认为没有理由不能仅仅为此使用约束(如您所建议的)。这样的事情应该做
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()
的调用。如果订单没有发票状态,则拦截器应仅将 call 转发至拦截的save()
。Programming Groovy书中有一些很好的例子说明了如何做到这一点。
GORM Activity
GORM提供了在持久对象生命周期中触发的许多events。可能在
beforeUpdate
或beforeValidate
事件中阻止了更新对象(我想抛出一个异常会起作用)
关于grails - 根据某些条件取消/阻止域对象的保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324251/