Недавно я унаследовал базу кода Grails с классом домена Name
с (среди прочих) свойствами first
и last
для представления первой и последней частей имени, соответственно , При написании модульного теста, который использовал этот домен, я столкнулся с некоторыми проблемами, связанными с именами этих свойств, которые были такими же, как методы first и last в пределах Grails. Теперь я могу исправить проблемы, переименовав свойства, но мне было интересно, есть ли способ в Grails использовать имена свойств first
и last
.Область Grails с «первым» и «последним» свойствами
А именно, ошибка, которую я получал, была 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
}
}
Вы должны использовать 'name.first', чтобы получить первое имя экземпляра' Name'. Почему это должно противоречить 'Name.first()' каким-либо образом? – dmahapatro
В блоке ограничений, когда Grails пытается применить «first (nullable: true)», выбрано исключение, указанное выше. – RandomMooCow
Ваш метод 'findOrCreate' функционально идентичен этому методу, который добавляется GORM ко всем классам домена. Http://grails.org/doc/latest/ref/Domain%20Classes/findOrCreateWhere.html –