Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails域,带“0”;“第一”;及;最后一句话;性质_Grails - Fatal编程技术网

Grails域,带“0”;“第一”;及;最后一句话;性质

Grails域,带“0”;“第一”;及;最后一句话;性质,grails,Grails,我最近继承了一个Grails代码库,其中包含一个名为Name的域类,其中属性first和last分别表示名称的第一部分和最后部分。在编写使用此域的单元测试时,我遇到了一些问题,这些属性的名称与Grails中的和方法的名称相同。现在,我可以通过重命名属性来解决问题,但是我想知道Grails中是否有一种方法可以使用属性名first和last 也就是说,我收到的错误是没有方法的签名:com.example.Name.first()适用于参数类型:()值:[] 可能的解决方案:当Grails尝试对属性应

我最近继承了一个Grails代码库,其中包含一个名为
Name
的域类,其中属性
first
last
分别表示名称的第一部分和最后部分。在编写使用此域的单元测试时,我遇到了一些问题,这些属性的名称与Grails中的和方法的名称相同。现在,我可以通过重命名属性来解决问题,但是我想知道Grails中是否有一种方法可以使用属性名
first
last

也就是说,我收到的错误是
没有方法的签名:com.example.Name.first()适用于参数类型:()值:[]
可能的解决方案:当Grails尝试对属性应用
null:true
约束时,first()、first(java.lang.String)、first(java.util.Map)、list()、list(java.util.Map)、print(java.lang.Object)

以下是
名称的来源:

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
    }

}

您说这个错误发生在约束块中。在这种情况下,您可以让它与显式的
委托一起工作。
,即

static constraints = {
  delegate.first(nullable:true)
  // and similarly for last
}

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

您应该使用
name.first
获取
name
实例的名字。为什么它会以任何方式与
Name.first()
冲突?在约束块中,当Grails尝试应用
first(nullable:true)
时,抛出了上面提到的异常。您的
findOrCreate
方法在功能上与GORM添加到所有域类@RandomMooCow的此方法相同。在任何时候与DSL发生名称冲突时都要注意这是一个有用的技巧。如果我想创建一个与局部变量同名的元素,那么在使用MarkupBuilder编写XML时,我经常使用这个方法。