2011-10-29 59 views
0

我試圖在grails的域類上實現compareTo,所以我可以返回一個SortedSet。我希望我的排序集按父級名稱排序,然後按「子級」名稱排序。例如(P =母體,C =小孩):在自引用對象(父/子關係)上覆蓋compareTo

  • P-1
    • C-1
    • C-2
  • P-2
    • C-3
    • C-4

我的類看起來是這樣的:

class Issue implements Comparable { 
String name 
Issue parent 

@Override 
public int compareTo(obj){ 
    if(obj.parent!=null && this.parent!=null){ 
    parent.name.compareTo(obj.parent.name) 
    }else{ 
     //What do I compare to sort the children relative to their parents? 
    } 
} 

回答

3

如果你正在尋找的排序套,也只是執行問題上的可比性和使用上的映射排序順序就足夠了?

class Issue implements Comparable { 
String name 
Issue parent 
SortedSet children 

static hasMany = [children : Issue] 
static belongsTo = [parent : Issue] 
static mapping = { 
    sort 'name' 
    children sort:'name' 
}  

@Override 
public int compareTo(obj){ 
    if(obj){ 
    this.name?.compareTo(obj.name) 
    } 
} 
+0

感謝您的建議!當我嘗試這樣做時,我得到一個NullPointerException - 對於至少一個實例,parent爲null。我可以編寫一個自定義SQL查詢來執行我想要的操作,但無法弄清楚如何在HQL中執行操作。 – raven

+0

糟糕,我的壞,我的意思是this.name而不是parent.name。 –

+0

卓越的解決方案,完美的工作! – raven