grails-基于hasMany关系的自定义排序?

grails-基于hasMany关系的自定义排序?,grails,gorm,Grails,Gorm,我正在开发一个多语言的grails应用程序 以下是我实现多语言功能的一个示例: 语言领域 class Language { String name ..... } class Category { static hasMany = [translations : CategoryTranslation] .... } class CategoryTranslation { String name String description

我正在开发一个多语言的grails应用程序

以下是我实现多语言功能的一个示例:

语言领域

class Language {
    String name
   .....
}


class Category { 
    static hasMany = [translations : CategoryTranslation]
    ....
}


class CategoryTranslation {

    String name
    String description

    Language lang
    static belongsTo = [category:Category]

}

所以category有很多翻译,每种语言有一个翻译,我想按名称对类别进行排序,但名称是CategoryTranslation域的一个属性

在hasMany关系上实现排序的最佳方式是什么


编辑:

问题是每个类别都有多个翻译,例如

cat1-->有3种翻译(阿拉伯语、英语和法语)

cat2-->有3种翻译(阿拉伯语、英语和法语)

cat3-->有3种翻译(阿拉伯语、英语和法语)

首先,我想为每种语言使用一个transient属性,但这种方法不适用于sort,因为Hibernate将请求转换为数据库处理,而数据库根本不知道“arabicName”字段是什么


现在,我将尝试在静态映射中使用公式添加瞬态属性,默认情况下,关联是
Set
。您必须使用
SortedSet
来维护订单:

import java.util.SortedSet

class Category { 
    SortedSet translations
    static hasMany = [translations : CategoryTranslation]
}

//implement Comparable
class CategoryTranslation implements Comparable {
    String name
    String description
    Language lang

    static belongsTo = [category:Category]

    int compareTo(obj) {
        obj.name <=> this.name
    }
}

hasMany在
translations
上,您希望对类别进行排序。问题不清楚。你能重新措辞最后两行吗?类别有许多翻译,每种语言有一个翻译,我想按英文名称对类别进行排序,名称是类别翻译域的一个属性。编辑中的内容对我来说仍然是一个灰色区域。答案基于您的评论。你想按类别翻译中的名字(英文)排序,对吗?是的,就像你说的,我想按类别翻译中的名字排序,但在类别翻译中,我不仅有英文名字,还有其他语言,每种语言都有一个类别翻译实例,我想根据名称和语言对所有类别进行排序,因此,如果我根据名称进行排序,则只应考虑语言=英语的翻译(类似于:Category.findAll([sort:“englishName”]),仅根据名称=英语的翻译进行排序),这仍然是一个灰色区域吗@哈米拉莫哈梅达明
import java.util.SortedSet

class Category { 
    SortedSet translations
    static hasMany = [translations : CategoryTranslation]
}

//implement Comparable
class CategoryTranslation implements Comparable {
    String name
    String description
    Language lang

    static belongsTo = [category:Category]

    int compareTo(obj) {
        obj.name <=> this.name
    }
}
import groovy.transform.Sortable

@Sortable(includes='name')
class CategoryTranslation {
    String name
    String description
    Language lang

    static belongsTo = [category:Category]
}