【发布时间】:2014-04-27 13:15:26
【问题描述】:
JOOQ用了半年了,不得不说非常棒:)
我遇到的问题是:我正在尝试生成包含order by 子句和case ... when 语句的普通SQL 查询,以实现in this part of JOOQ tutorial 所述的自定义排序顺序。
但是,当我使用Field.sortAsc(Collection< T> sortList) 方法并传递Strings 的Collection 时,我在查询中得到以下order by 子句:
order by
case `type`
when ? then ?
when ? then ?
when ? then ?
when ? then ?
when ? then ? end asc
因为我没有使用 JOOQ 来执行查询,所以我需要自己指定这些值,这很不方便。
此问题的部分解决方案是通过使用DSL.inline(T) 方法从原始值获得的Param<String> 值中的Collection。但是,在这种情况下,占位符仍然存在,查询中的 order by 子句如下所示:
order by
case `type`
when 'type_a' then ?
when 'type_b' then ?
when 'type_c' then ?
when 'type_d' then ?
when null then ? end asc
这是预期行为还是可以被视为错误并应报告?
目前,我通过使用Field.sort(Map sortMap) 方法解决了这个问题,将Map<Param<String>, Param<Integer>> 传递给它并使用递增的整数值。这个方法也有一个小问题,因为它返回 SortField 实例,它没有像 asc()、desc() 或 sort(SortOrder) 这样的方法,所以为了按不同的顺序排序,应该重新生成这个映射。
提前感谢您的帮助!
【问题讨论】:
-
"这个方法也有小问题,因为它返回的 SortField 实例没有 asc()、desc() 或 sort(SortOrder) 等方法,所以为了使用不同的顺序排序,应该重新生成此地图。” - 嗯,
Field.sort(Map)返回一个SortField,它有asc()、desc()方法。你的意思是打电话给他们没有效果,也许吧?你能举个例子吗? -
根据 Javadoc jooq.org/javadoc/3.3.x/org/jooq/SortField.html
SortField是一个没有asc()、desc()或sort(SortOrder)方法的接口......或者我错过了什么?