【发布时间】:2019-11-25 05:58:28
【问题描述】:
我正在使用 JOOQ 创建对 Oracle 12 数据库的本机查询。 当我将结果转换为我的 POJO 时,order by 子句中的订单丢失了。
基本上我要加入两个表,任务和变量。一个任务可以有很多变量。
我正在通过这种方式将结果转换为我的 POJO:
select.fetchGroups(Task.class, Variable.class);
public class Task{
private String id;
private String name;
private String formKey;
private List<Variable> variables = new ArrayList<Variable>();
getters()/setters()
...
hashCode()
...
equals()
}
public class Variable{
private String vId;
private String vName;
private String vValue;
private String vType;
getters()/setters()
...
hashCode()
...
equals()
}
我正在尝试在 select 末尾手动“插入”我的 order 子句(因为没有找到使用 jooq sintax 构建它的方法,对此的一些见解将不胜感激):
jooq dslcontext
@Autowired
private DSLContext dsl;
填充的列表
Map<Task, List<Variable>> response;
简单的句子顺序。
String orderClause = " case when V.NAME_ = '"+sortColumn+"' then V.TEXT_ end "+sortDirection;
(如果我记录这个的普通 SQL,结果是正确排序的)
SelectSeekStep1<Record, Object> selectOrdered = select.orderBy(DSL.field(orderClause));
response = selectOrdered.fetchGroups(Task.class, Variable.class);
此时我的响应变量已经是一个映射,但是顺序丢失了。
没有错误信息或异常,地图按预期返回,但订单丢失。
如果我遗漏了一些关键细节,请告诉我,我会补充。
【问题讨论】:
-
如果你想在 Map 中保留插入顺序,然后去 LinkedHashMap 它将解决你的问题。
-
1) “由于没有找到使用 jooq sintax 构建它的方法,因此将不胜感激” 您能否展示您完整的 jOOQ 代码和为什么你不能用 jOOQ 实现你想要的? 2)、为什么要区分
Task和TaskQuery?它们有何不同? 3) 完整的查询是什么样的? -
@LukasEder 抱歉,那些 TaskQuery 是错字,我将它们更改为“Task”。关于完整的 jooq,这是一个很长的查询,但 sql 输出是预期的,所以我认为它工作得很好。
-
如果不了解您想要通过
ORDER BY子句实现的确切,真的很难为您提供帮助。对我来说,它看起来不像你认为它正在做的事情,即使在 SQL 中也是如此。或者,您发布的内容不完整。
标签: java oracle sql-order-by jooq