通过constrainedProperty访问Grails中的唯一约束
我在访问Grails域中定义的唯一约束时遇到问题。(略微编辑以具有唯一约束): 在Grails 3.1.9中: 此代码有效:通过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
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