Grails 在约束中导入域

Grails 在约束中导入域,grails,grails-domain-class,Grails,Grails Domain Class,我有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'

我有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]的属性[description]的约束[unique]的作用域必须是同一类的有效属性名称

如何从类a到类b获取属性?

您需要编写a来检查唯一性,因为它所依赖的信息比
b
的单个实例所依赖的信息要多

差不多

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

可能会成功。

假设您在Grails 2中尝试这样做+

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

class B {
    String description
    static contraints = {
        description unique:true
    }
}
但是我认为您需要从类
a
导入约束,这样做

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

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


更新

我遇到了一个类似的问题,并找到了解决办法。所以我想在这里和你分享。 这个问题可以通过自定义验证器来解决。在您的案例中,类
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()
    })
}

很难正确回答你的问题,因为要求有点奇怪。但可能会有所帮助。

描述必须是每个名称或每个id的唯一描述?a和B之间有关系吗?如果a和B之间没有关系,这是没有意义的。a和B之间不可能有关系吗?感谢val是引用描述的,不起作用,因为我需要基于名称类a使描述唯一,例如name=“1”description=“1”true,name=“2”description=“1”true,name“1”description=“1”false,总之谢谢您的帮助。是的,我使用grails 2.1.1,我只需要基于类a验证描述必须唯一。name,谢谢,我这里有同样的问题,如果我找到了解决办法,我会让你知道的。我会继续回到这篇文章的链接,谢谢!