Grails 在约束中导入域
我有2个域类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'
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,谢谢,我这里有同样的问题,如果我找到了解决办法,我会让你知道的。我会继续回到这篇文章的链接,谢谢!