自引用列表自定义可更新订单

时间:2016-09-28 12:52:51

标签: hibernate grails gorm

我已经定义了以下域名:

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进行排序。

我尝试了各种解决方法,包括标准,但似乎无法以sub_modules_idx以外的任何顺序恢复子模块。

如何以displayOrder顺序返回子模块?

2 个答案:

答案 0 :(得分:0)

我能为我的用例找到的唯一解决方案是在获取模块后应用排序。

即:

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

如果有人能提出更好的解决方案,我会接受他们的回答。

答案 1 :(得分:0)

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

你可以使用&#39; asc&#39;根据您的需要