【问题标题】:QueryDSL coalesce in order byQueryDSL 按顺序合并
【发布时间】:2018-11-13 23:27:56
【问题描述】:

我正在尝试连接两个表并输出它们并按两个字段按字母顺序对它们进行排序,例如order by coalesce(tableA.name, tableB.name)(不是order by tableA.name, tableB.name),所以结果应该是这样的:

tableA.name    tableB.name
A              null
B              null
null           C
D              null
null           E

在普通 SQL 中它可以正常工作,但是当我尝试使用 QueryDSL 执行此操作时,它会在生成的 select 语句中添加额外的列,并且仅按第一个指定的列进行排序:

//java code
query.orderBy(qTableA.name.coalesce(qTableB.name).asc());

//generated sql code
SELECT ...
       COALESCE(tablea_.NAME, tableb_.NAME) AS col_9_0_
FROM   ...
WHERE  ...
ORDER  BY tablea1_.NAME ASC  

有人能说出它为什么会这样吗?是否有可能让它按我的预期工作?

【问题讨论】:

    标签: jpa jpql querydsl


    【解决方案1】:

    试试这个:

    final Coalesce<String> coalesce =
        new Coalesce<>(String.class).add(optionalA).add(optionalB);
    

    在您的选择字段和 order by 子句中使用合并:

    .orderBy(coalesce.asc()) // or desc()
    

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多