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