0

我有以下...

@Validateable
class Command1{
  List<Command2> subCommands
}

@Validateable
class Command2{
  String name
  Long id
}

现在我想创建一个约束来确保 subCommands 中的项目具有唯一的名称。我的约束应该是什么样的?它应该在 Command1 还是 Command2 上?

4

1 回答 1

1

既然Command2不知道Command1,你必须把你的约束放在Command1. 您可以使用自定义约束来完成此操作,因为unique约束在数据库级别进行检查并且仅适用于域对象。

@Validateable
class Command1{
    List<Command2> subCommands

    static constraints = {
        subCommands validator: { val ->
            val.unique(false) { it.name } == val
        }
    }
}

已在 Groovy shell 中测试,但未在 Grails 中测试:

list = [[name: 'foo'], [name: 'bar'], [name: 'baz']]
assert list.unique(false) { it.name } == list
list = [[name: 'foo'], [name: 'bar'], [name: 'bar']]
assert list.unique(false) { it.name } != list

传递falseunique()它告诉它不要就地改变列表。

于 2014-06-24T16:33:22.443 回答