我正在使用 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()
}
我试图在选择结束时手动“插入”我的 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);
此时我的响应变量已经是一个地图,但是顺序丢失了。
没有错误消息或异常,地图按预期返回,但订单丢失。
如果我遗漏了一些关键细节,请告诉我,我会添加它。
各种fetchGroups()
方法LinkedHashMap
在幕后使用 a ,它们返回给您,并以获取顺序迭代记录,因此您为 jOOQ 查询提供的任何顺序对于这些方法都是稳定的。
从您所展示的内容来看,您正在按某些V
列进行排序,这可能代表Variable
. 您不可能期望Task
在客户端分组时保留该顺序,尽管每个 Task
. 我来举例说明。如果这是您从数据库中获得的信息(因为您按变量排序):
TASK VARIABLE
1 A
2 B
3 C
1 D
2 E
然后,这些fetchGroups()
方法将产生以下客户端分组:
TASK = 1
VARIABLE = [A, D]
TASK = 2
VARIABLE = [B, E]
TASK = 3
VARIABLE = [C]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句