QueryDSL объединяется в порядке - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь объединить две таблицы, вывести их и отсортировать по алфавиту по двум полям, например 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, он добавляет дополнительный столбец к сгенерированному оператору выбора и сортирует только по первому указанному столбцу:

//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  

Может кто-нибудь сказать, почему он это делает, иМожно ли заставить его работать так, как я ожидаю?

1 Ответ

0 голосов
/ 10 мая 2019

Попробуйте:

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

Используйте объединение в выбранных вами полях и так в вашем заказе по пункту:

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