2013-05-24 3 views
1

Вот мой домен класс:Grails домена самореференция рекурсивный вызов

class Category { 
    String name 

    static hasMany = [subCategories: Category] 
    static belongsTo = [parentCategory: Category] 

    static mapping = { 
     subCategories joinTable: false, column: "parent_id" 
    } 

    static constraints = { 
     parentCategory nullable: true 
    }} 

Категория класс домена и имеет самосоотнесения родителя и список детей.

Теперь я хочу что-то вроде этого: учитывая идентификатор родительской категории, я хочу, чтобы список всех подкатегорий принадлежал этому id. (NB: не прямые дети, все дети в ид)

Например, идентификатор 1 имеет детей 2 и 3, и 2 имеет детей 4 и 5.

Учитывая я получил идентификатор категории 1 от клиента, Я хочу подкатегории с id 2,3,4,5

Взяв преимущество Groovy, какой лучший код для его реализации?

ответ

3

Неиспользованный код, но может заставить вас двигаться в правильном направлении. Может быть, «более привлекательный» способ сделать это, но я не уверен.

def findAllChildren(category, results = []) { 
    category.subCategories.each { child -> 
     results << child 
     findAllChildren(child, results) 
    } 
} 

def someOtherMethod() { 
    def allChildren = [] 
    findAllChildren(parentCategory, allChildren) 
} 
+0

Спасибо, это действительно полезно, и я проверил код. – ttt

+0

Вы должны использовать собственный hql-запрос, а не использовать каждый, поскольку это увеличит время отклика, что плохо для вашего приложения. –

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