2016-09-28 4 views
0

Я определил следующий домен:Самого Referencing Списка пользовательский Updateable Заказать

class Module implements Comparable<Module> { 

    String name 
    Integer displayOrder 

    List<Module> subModules 
    Set<ModuleItem> items 

    static belongsTo = [parent: Module] 
    static hasMany = [subModules: Module, items: ModuleItem] 

    static constraints = { 
     parent nullable: true 
    } 

    static mapping = { 
     version false 
     sort 'displayOrder' 
     subModules joinTable: false, column: 'parent_id', lazy: false, sort: 'displayOrder' 
     items lazy: false, sort: 'displayOrder' 
    } 

    @Override 
    int compareTo(Module other) { 
     this.displayOrder <=> other.displayOrder 
    } 
} 

Когда я получаю модуль с подмодулями, (даже первый уровень), они сортируются по их sub_modules_idx, а не displayOrder.

Я пробовал различные способы разрешения этого вопроса, включая критерии, но, похоже, не может получить subModules обратно в любом порядке, кроме sub_modules_idx.

Как получить subModules обратно в displayOrder?

ответ

0

Единственное решение, которое я могу найти для моего варианта использования, - применить сортировку после извлечения модуля.

т.е .:

Module.list().each { module -> 
    module.subModules = module.subModules.sort {it.displayOrder} 
} 

Если кто-то может предложить лучшее решение, я приму их ответ.

0
subModules joinTable: false, column: 'parent_id', lazy: false, sort: 'displayOrder', order: 'desc' 

вы можете использовать «» в зависимости ИССА от ваших потребностей

+0

«по возрастанию» по умолчанию, если он не предусмотрено, и возрастающий порядок дисплея, как я требую. Я попробую «desc», чтобы узнать, применит ли этот тип к displayOrder. – chim