我有以下...
@Validateable
class Command1{
List<Command2> subCommands
}
@Validateable
class Command2{
String name
Long id
}
现在我想创建一个约束来确保 subCommands 中的项目具有唯一的名称。我的约束应该是什么样的?它应该在 Command1 还是 Command2 上?
我有以下...
@Validateable
class Command1{
List<Command2> subCommands
}
@Validateable
class Command2{
String name
Long id
}
现在我想创建一个约束来确保 subCommands 中的项目具有唯一的名称。我的约束应该是什么样的?它应该在 Command1 还是 Command2 上?
既然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
传递false
给unique()
它告诉它不要就地改变列表。