我正在尝试在Grails 2.4.3中设置动态SearchService,以便将其用于所有域类搜索。
现在我遇到问题来解决不在Criteria所在的类中的给定排序属性。
例如:
我有一个Foo
类,其中包含一个属性Bar bar
,而Bar有一个属性String name
。现在我想对Bar的名称进行排序,因此我将作为排序参数进入Service bar.name
。
现在我必须动态解析这个排序参数,我也可以使用像world.name
这样的东西。
我找到this:
def criteria = Child.createCriteria();
println criteria.list{
parent {
order("name")
}
}
我试图让它变得动态,这是我方法的一部分:
def c = domainClass.createCriteria()
def list = c.listDistinct {
if (sort) {
if (sort.contains('.')) {
String[] splittedSort = sort.tokenize('.')
sort = splittedSort.last()
splittedSort = splittedSort[0..-2]
splittedSort[0].toString() {
order(sort, sortorder)
}
} else {
order(sort, sortorder)
}
}
}
这不起作用:(
任何建议我如何才能完成这项工作?
答案 0 :(得分:0)
您可以使用条件查询别名,而不是尝试通过动态名称调用方法。像这样:
def c = domainClass.createCriteria()
def list = c.listDistinct {
if (sort) {
if (sort.contains('.')) {
String[] splittedSort = sort.tokenize('.')
sort = splittedSort.last()
splittedSort = splittedSort[0..-2]
createAlias(splittedSort.join('.'), 'sortAlias')
order("sortAlias.${sort}", sortorder)
} else {
order(sort, sortorder)
}
}
}