У меня есть этот запрос:Как сделать заказ на вычисляемый столбец в новом DTO запросе
em.createQuery("select new SomeDto(some.name, " +
"(select max(other.weight) from Other other where other.someId = some.id) as otherWeight" +
") from Some some order by otherWeight")
.getResultList();
который не работает, потому что спящий режим игнорирует as otherWeight
и просто генерирует as col_1_0_
вместо этого.
Есть ли способ с таким видом запроса select new dto
, чтобы получить псевдонимы для столбцов? Если нет: как я могу сделать такой запрос (отобразить результат запроса в конструктор DTO)?
это работает, если для каждого 'Some' всегда есть' Other', но в случае, если это необязательно, я бы исключил эти результаты (внутреннее соединение) правильно? – NoUsername
@NoUsername Верно, пожалуйста, см. Мой обновленный ответ. –
Возможно, вы правы. Моя первоначальная цель заключалась в том, чтобы каким-то образом использовать псевдоним в предложении order by, чтобы сделать все это более читаемым (предположим, что вместо 'max (other.weight)' есть еще более сложное выражение), однако, похоже, что это что-то нужно больше в «чистом sql», если вы много раз пишете запросы. При построении таких jpql-запросов такие выражения могут быть помещены в переменные и объединены таким образом, чтобы все еще сохранять их читабельными. Поэтому я думаю, что на самом деле нет решения для того, что я хотел, потому что это не то, что нужно «нужно». – NoUsername