0

我有 2 个域类

class a {
    String name
    static constraints = {
        name unique:true
    }
}

class b {
    String description
}

在域类 b 我想调用类 a

import a
class b {
    String description
    static constraints = {
         description unique:'a.name'
    }
}

并得到错误

类 [b] 的属性 [描述] 的约束 [唯一] 范围必须是同一类的有效属性名称

我如何获得从 a 类到 b 类的属性?

4

2 回答 2

1

您需要编写一个自定义验证器来检查唯一性,因为它依赖于比单个实例更多的信息b

就像是

static constraints {
     description validator: { val ->
         !a.findByName(val)
     }
}

可能会成功。

于 2013-03-12T18:26:28.467 回答
1

假设您尝试在 Grails 2+ 中执行此操作

你不能那样使用验证。在您的示例中,您需要引用同一域类的属性。要更正课堂上的约束,B您可以编写:

class B {
    String description
    static contraints = {
        description unique:true
    }
}

但我认为你想从a这样完成的类中导入约束。

class B {
    String description
    static contraints = {
        importFrom A
    }
}

请参阅http://grails.org/doc/latest/guide/validation.html#sharingConstraints

这将导入两个类共享的属性的所有约束。在你的情况下是没有的。


更新

我有一个类似的问题并找到了解决方案。所以想在这里跟大家分享一下。该问题可以通过自定义验证器来解决。在您的情况下对 class 的限制B

static constraints = {

    description(validator: {
        if (!it) {
            // validates to TRUE if the collection is empty
            // prevents NULL exception
            return true
        }

        def names = A.findAll()*.name
        return names == names.unique()
    })
}

由于要求有点奇怪,因此很难正确回答您的问题。但也许它会有所帮助。

于 2013-03-12T18:27:31.253 回答