2016-09-28 78 views
0

我已經定義了以下領域:自參照表自更新的訂單

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順序返回子模塊?

回答

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' 

可以使用,這取決於你的需要「ASC」

+0

「ASC」是默認的,如果沒有提供,並且上升的顯示順序,我需要。我會嘗試'desc'來查看這是否適用於displayOrder。 – chim