grails - 根据某些条件取消/阻止域对象的保存?

标签 grails gorm

我需要基于某些属性来阻止或取消域对象的保存。
可以在约束条件下完成吗?

例:
“订单”域对象的状态为“已开发票”,则该订单将不再能够更新。

关于如何解决这个问题有什么建议吗?

最佳答案

我认为没有理由不能仅仅为此使用约束(如您所建议的)。这样的事情应该做

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。可能在beforeUpdatebeforeValidate事件中阻止了更新对象(我想抛出一个异常会起作用)

关于grails - 根据某些条件取消/阻止域对象的保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324251/

相关文章:

grails - Grails表单提交而不更改 View

grails - 如何正确使用一对多关系中的mappedBy

grails - GRAILS UUID和PSQL的问题

grails - GORM在调用beforeInsert方法之前检查约束

grails - Grails 2.3.x升级产生重复hasMany关系

hibernate - hibernate grails顺序更改结果数

oop - 特殊领域对象的处理方法是什么?

grails - 用于单元测试中grails服务属性的NullPointerException

grails - 在Grails中,有没有一种好的方法可以使用Joda time模拟当前时间?

c# - 如何使用curl对Web服务进行身份验证?