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

时间:2017-02-01 19:21:00

标签: grails constraints grails-domain-class

我在访问Grails域中定义的唯一约束时遇到问题。 Here's an example from the official Grails documentation(稍加编辑以具有唯一约束):

class User {
    String firstName
    String middleName

    static constraints = {
        firstName blank: false, nullable: false
        middleName unique: true, nullable: true
    }
}

关于Grails 3.1.9:

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

此代码不起作用:User.constrainedProperties.middleName.unique

我收到此错误:

groovy.lang.MissingPropertyException: No such property: unique for class: grails.validation.ConstrainedProperty

有没有办法弄清楚是否设置了这个约束,类似于检查"空白"约束是否设定?感谢

更新:这是我在尝试使用评论中建议的代码时得到的结果(空白与可空的差异)。 hasAppliedConstraint工作正常,但getAppliedConstrait没有。我想我在某个地方犯了一个愚蠢的错误?

Condition not satisfied:

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

2 个答案:

答案 0 :(得分:0)

这是最终对我有用的东西。不知道为什么。

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

答案 1 :(得分:0)

您的代码有效,因为User.constrainedProperties返回Map,密钥为domainPropertyName,值为ConstrainedProperty。在您的情况下,您将获得ConstrainedProperty属性middleName,其中包含方法getAppliedConstraints(),该方法会返回应用于middleName的所有约束。

你可以做得更好:

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