如何在Grails中使用@Validateable确保非域命令类的唯一性

如何在Grails中使用@Validateable确保非域命令类的唯一性,grails,spring-validator,Grails,Spring Validator,我有以下几点 @Validateable class Command1{ List<Command2> subCommands } @Validateable class Command2{ String name Long id } @validatable 类命令1{ 列表子命令 } @可验证 类命令2{ 字符串名 长id } 现在我想创建一个约束,以确保子命令中的项具有唯一的名称。我的约束应该是什么样子?它应该在Command1还是Command2上?因为Co

我有以下几点

@Validateable
class Command1{
  List<Command2> subCommands
}

@Validateable
class Command2{
  String name
  Long id
}
@validatable
类命令1{
列表子命令
}
@可验证
类命令2{
字符串名
长id
}

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

因为
Command2
不知道
Command1
,所以您必须对
Command1
进行约束。您可以通过自定义约束来实现这一点,因为约束在数据库级别进行检查,并且仅适用于域对象

@Validateable
class Command1{
    List<Command2> subCommands

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

false
传递给告诉它不要在适当的位置修改列表。

您尝试过自定义约束吗?我尝试过它,但似乎无法找到创建它的正确方法。我知道我有时会很笨:——)
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