API标准动态排序



我正试图在Grails 2.4.3中设置一个动态SearchService,以便将其用于所有域class搜索。

现在我要解决的问题是,给定的排序属性不在Criteria所在的类中

例如:我有一个包含属性Bar barFoo类,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)
            }
        } 
}

最新更新