grails - 如何在Grails中使用@Validateable确保非域Command类的唯一性

标签 grails spring-validator

我有以下...

@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() 告诉它不要就地改变列表。

关于grails - 如何在Grails中使用@Validateable确保非域Command类的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390298/

相关文章:

javascript - 为什么我的 GSP 拉入我的 AngularJS javascript 文件但不执行我的 Controller 功能?

hibernate - 如何批量删除 Grails/GORM 中的记录?

java - 如何为 `javax.validation.constraints` 注释添加自定义 validator ?

java - 所有验证消息都可以在带注释驱动的 hibernate 验证中看到

java - Spring 4 MVC 验证不工作 - BindingResult hasErrors 是 false

java - 在这种情况下,为什么我会收到错误“"Neither BindingResult nor plain target object for bean name ' user' available as request attribute”?

hibernate - 带有Criteria的Grails,或者一种按预定顺序排序的快速方法

Grails 对象关系,其中拥有方没有对其所有者的引用

grails - 更改 GORM 表名称

java - 多种 View ,一种形式,不同的验证