通过constrainedProperty访问Grails中的唯一约束

通过constrainedProperty访问Grails中的唯一约束,grails,constraints,grails-domain-class,Grails,Constraints,Grails Domain Class,我在访问Grails域中定义的唯一约束时遇到问题。(略微编辑以具有唯一约束): 在Grails 3.1.9中: 此代码有效:User.constrainedProperties.firstName.blank 此代码无效:User.constrainedProperties.middleName.unique 我得到这个错误: groovy.lang.MissingPropertyException: No such property: unique for class: grails.vali

我在访问Grails域中定义的唯一约束时遇到问题。(略微编辑以具有唯一约束):

在Grails 3.1.9中:

此代码有效:
User.constrainedProperties.firstName.blank

此代码无效:
User.constrainedProperties.middleName.unique

我得到这个错误:

groovy.lang.MissingPropertyException: No such property: unique for class: grails.validation.ConstrainedProperty
是否有办法确定是否设置了此约束,类似于检查是否设置了“空白”约束?谢谢

更新:以下是我尝试使用注释中建议的代码时得到的结果(blank与nullable的区别)。hasAppliedConstraint工作正常,但GetAppliedConstraint不行。我想我在什么地方犯了个愚蠢的错误

Condition not satisfied:

User.constrainedProperties.middleName.getAppliedConstraint('‌​unique')
                                           |                          |
                                           |                          null
                                          [ConstrainedProperty@20344ed7User'middleName'middleNamemap['nullable' -> [NullableConstraint@4a2415c5true], 'unique' -> [UniqueConstraint@7115e8atrue]]]

这就是最终对我有效的方法。不知道为什么

User.constrainedProperties.middleName.getAppliedConstraints().find {it.name == 'unique'}.properties.parameter

您的代码之所以有效,是因为
User.constrainedProperties
返回
Map
,其中包含键
domainPropertyName
和值
ConstrainedProperty
。在本例中,您将获取属性
middleName
ConstrainedProperty
,该属性具有方法
getAppliedConstraints()
,该方法返回应用于
middleName
的所有约束

你最好能:

User.constrainedProperties.middleName.getAppliedConstraint('unique').parameter

查看执行此操作的方法将取决于您使用的Grails版本。啊,是的,我应该指定我的Grails版本为3.1.9,类似于
User.constrainedProperties.middleName.hasAppliedConstraint('unique')
将告诉您是否设置了约束。类似于
User.constrainedProperties.middleName.getAppliedConstraint('unique').unique
会告诉您该值是
true
还是
false
如果我查看文档(),我看不到列出的唯一约束。。。
User.constrainedProperties.middleName.getAppliedConstraint('unique').parameter