1

说,我有两个域类:

class Foo {
   Bar bar

   Long baz
}

class Bar {
   String name
}

我接到一个电话createCriteria,想要按 Bar 的名称(或客户想要排序的任何其他有效属性)进行排序,忽略大小写。我已经能够将其减少到:

Foo.createCriteria().list() {
    //...
    bar {
        order((params.sortOrder == 'asc' ? 
            Order.asc('name') : // 'name' is a variable in the real code 
            Order.desc('name')
        ).ignoreCase())
    }
}

但是当 sort 属性嵌套时(即 的属性bar),我得到一个异常:

org.hibernate.QueryException: could not resolve property: name of: Foo

我发现了这些相关的 Grails 错误GRAILS-8182GRAILS-9171GRAILS-3911,这使得似乎有一些错误组合使我想做的事情变得不可能。

有没有办法对嵌套属性进行不区分大小写的排序createCriteria?我意识到我可以在客户端或 Groovy 列表上进行排序,但我真的不希望重新发明轮子(特别是因为它会是一个非常丑陋的轮子)。

我正在使用 Grails 2.2.4。

4

1 回答 1

0

在尝试解决与 grails 中的排序相关的类似问题时,我偶然发现了这个问题。也许与此同时,已经找到了解决方案。如果没有,我想建议您尝试以下方法:

Foo.createCriteria().list() {
    createAlias("bar","_b")
    order("_b.name", (params.sortOrder == "asc")?"asc":"desc")
}

通过这种方式,您应该能够订购Foobybar.name

于 2015-02-13T09:28:36.023 回答