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