自参照表自更新的订单

自参照表自更新的订单

问题描述:

我已经定义了以下领域:自参照表自更新的订单

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顺序返回子模块?

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

即:

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

如果任何人都可以提出一个更好的解决方案,我会接受他们的答案。

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

可以使用,这取决于你的需要“ASC”

+0

“ASC”是默认的,如果没有提供,并且上升的显示顺序,我需要。我会尝试'desc'来查看这是否适用于displayOrder。 – chim