Grails - > GORM - >只强迫一个

时间:2014-09-25 13:40:04

标签: grails gorm

我正在尝试确保以下实体只有一行记录:

class CreditType {

String name

String external_id

Boolean usedForWaivedFee = Boolean.FALSE // default to false

static hasMany = [credits: Credit]

  static constraints = {
   external_id unique: true
   name unique: true
  }
}

或者换句话说,我试图确保只有一行“usedForWaivedFee”是真的。

我最好的想法是:禁区中的自定义验证器循环遍历所有当前的CreditType并确保没有任何现有的验证器。

思想?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以在自定义验证程序中使用countBy方法,而不是遍历所有实例。例如,您可以使用以下自定义验证器

static constraints = {

        usedForWaivedFee validator: { val, obj ->
            if (val) {
                if (CreditType.countByUsedForWaivedFee(Boolean.TRUE)) {
                    return false
                }
            }
            return true
        }
}