说,我有两个域类:
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-8182,GRAILS-9171,GRAILS-3911使得它看起来像是一个组合的错误,这些错误构成了我想做的事情,而不是可能。
有没有办法对createCriteria
中的嵌套属性进行不区分大小写的排序?我意识到我可以在客户端或Groovy列表上排序,但我真的不想重新发明轮子(特别是因为它会是一个非常难看的轮子)。
我正在使用Grails 2.2.4。
答案 0 :(得分:0)
在尝试解决与grails中的排序相关的类似问题时,我偶然发现了这个问题。也许在此期间已经找到了解决方案。如果没有,我想建议您尝试以下方法:
Foo.createCriteria().list() {
createAlias("bar","_b")
order("_b.name", (params.sortOrder == "asc")?"asc":"desc")
}
通过这种方式,您应该可以按Foo
bar.name
的实例