我正试图在Grails 2.4.3中设置一个动态SearchService,以便将其用于所有域class搜索。
现在我要解决的问题是,给定的排序属性不在Criteria所在的类中
例如:我有一个包含属性Bar bar
的Foo
类,Bar具有属性String name
。现在我想按照Bar的名称进行排序,所以我将Service bar.name
作为排序参数。
现在我必须动态解析这个排序参数,这样我也可以使用类似world.name
的东西。
我发现了这个:
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)
}
}
}
这不起作用:(
有什么建议我怎么做这项工作吗?
您可以使用条件查询别名,而不是尝试通过动态名称调用方法。像这样:
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)
}
}
}