2015-09-16 3 views
0

Какое наиболее эффективное решение для получения значения атрибута status из экземпляра ClassD имеет значение атрибута name и начиная с экземпляра ClassA?Использовать критерии создания для нескольких ассоциаций

я могу использовать на петле в каждом списке, но я думаю, что есть лучшее решение, с помощью создания критериев

Class ClassA { 
    static hasMany = [CLassBList:ClassB] 
} 


Class ClassB { 
    static hasMany = [CLassCList:ClassC] 
    static belongsTo = [ClassA] 
} 


Class ClassC { 
    static hasMany = [CLassDList:ClassD] 
    static belongsTo = [ClassB] 
} 


Class ClassD { 
    String name 
    String status 
    static belongsTo = [ClassC] 
} 

ответ

1

Am если предположить (хотя код не упоминает об этом), что у вас есть какой-то критерий на ClassA, что вы хотите искать дальше, то вы можете использовать createCriteria так:

def c = ClassD.createCriteria() 
def results = c.list() { 
    projections { property('status') } 
    classC { 
    classB { 
     classA { 
     eq('classAProperty', someClassAValue) 
     } 
    } 
    } 
} 

используйте .get(), а не .list(), если вы ожидаете только один результат, то вы также можете заказ().

Удалите выступы, если вы хотите вернуть весь ClassD, а затем обработайте, как вы сочтете нужным.

+0

В вашем классе кодаC класс B и класс A являются занятиями или классами? – Jils

+0

Это свойства/метки родительского класса. Я обычно указываю applyTo следующим образом: static принадлежитTo = [classC: ClassC] – shuttsy

+0

Я не указывал applyTo, как вы, но вот так: static принадлежитTo = [ClassC]. Следует создать в результате createCritea как следствие? – Jils

Смежные вопросы