具有"第一"和"最后"属性的Grails域

Ran*_*Cow 2 grails

我最近继承了Grails代码库,其中包含一个名为Namewith(以及其他)的域类,属性firstlast分别代表名称的第一部分和最后部分.在编写使用该域的单元测试时,我遇到了一些问题,这些问题源于这些属性的名称与Grails中的第一个最后一个方法相同.现在,我可以通过重命名属性来解决问题,但我想知道Grails中是否有办法使用属性名称firstlast.

也就是说,我收到的错误是No signature of method: com.example.Name.first() is applicable for argument types: () values: [] Possible solutions: first(), first(java.lang.String), first(java.util.Map), list(), list(java.util.Map), print(java.lang.Object)Grails尝试将nullable: true约束应用于属性时.

这是以下来源Name:

class Name {
    String first
    String middle
    String last
    static belongsTo = [person : Person]

    static constraints = {
        first(nullable:true)
        middle(nullable:true)
        last(nullable:true)
    }

    public static Name findOrCreate(String first, String middle, String last){
        def name
        name = Name.createCriteria().get{
            and{
                eq('first', first)
                eq('middle', middle)
                eq('last', last)
            }
        if(!name){
            name = new Name()
            name.first = first
            name.middle = middle
            name.last = last
        }       
        return name
    }

    static mapping = {
        cache true
    }

}
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 7

你说这个错误发生在约束块中.在这种情况下,您可以使用明确的delegate.,即

static constraints = {
  delegate.first(nullable:true)
  // and similarly for last
}
Run Code Online (Sandbox Code Playgroud)

强制将first其视为对约束DSL的调用,而不是静态GORM方法.