我正在开展多语言Grails申请。
这是我实现多语言功能的一个示例:
语言域
class Language {
String name
.....
}
class Category {
static hasMany = [translations : CategoryTranslation]
....
}
class CategoryTranslation {
String name
String description
Language lang
static belongsTo = [category:Category]
}
所以类别有多个翻译,每种语言1个翻译,我想按名称排序类别,但名称是CategoryTranslation域的属性
在hasMany关系上实现排序的最佳方法是什么?
编辑:
问题是我对每个类别都有多个翻译,例如,
cat1 - >有3个翻译(阿拉伯语,英语和法语)
cat2 - >有3个翻译(阿拉伯语,英语和法语)
cat3 - >有3个翻译(阿拉伯语,英语和法语)
def categoriesSortedByArabicName = Category.list(sort: "arabicName");
def categoriesSortedByEnglishName = Category.list(sort: "englishName");
首先我想使用,每种语言的瞬态属性,但这种方法不适用于排序,因为Hibernate将请求转换为数据库处理,而数据库根本不知道字段是什么" arabicName& #34;无论如何。
现在我将尝试使用静态映射中的公式添加瞬态属性
答案 0 :(得分:1)
默认情况下,关联为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
}
}
使用Grails 2.4(最新里程碑),您可以获得Groovy 2.3.0-SNAPSHOT,您可以在CategoryTranslation
使用@Sortable
AST转换,如下所示:
import groovy.transform.Sortable
@Sortable(includes='name')
class CategoryTranslation {
String name
String description
Language lang
static belongsTo = [category:Category]
}