queryDsl и preapredStatements (coalesce)
От: SkyKnight Швейцария  
Дата: 24.04.20 09:57
Оценка:
Добрый день,

сразу скажу, что у меня не очень много опыта с queryDSL.

Вопрос, собственно такой.

queryDSL генерирует такой вот SQL, который потом отдает в Hibernate.

select nvl(sum(column), ?1) from table where id=?2

Hibernate из этого делает

select nvl(sum(column), ?) from table where id=?

проблема в том, есть базы данных, в частности Informix, который не понимает "?", если они в заключены между select и from.

Т.е. такой вот sql работает без проблем

select nvl(sum(column), 0) from table where id=?


Есть ли возможность сказать в queryDSL, чтобы она сразу подставляла значение и сразу генерила вот такое

select nvl(sum(column), 0) from table where id=?

или

select nvl(column, "ааа") from table where id=? (для оракла надо будет, правда, генерить select nvl(column, 'aaa') from table where id=?)

или может есть какие-либо лучшие пути решения? А то вдруг вообще не туда копаю
Может например в hibernate подправить диалект для Infromix, но пока не придумал как это сделать там.

Заранее спасибо.


P.S.

JPAQuery<Float> query = new JPAQuery<>(em);
query.select(QPP.reservedQuantity.sum().coalesce(0F).asNumber().floatValue());


Вот тут, правда, говорят, что должно сразу значение подставляться. Но у меня что-то нет.
Отредактировано 24.04.2020 10:20 SkyKnight . Предыдущая версия .
Re: queryDsl и preapredStatements (coalesce)
От: bzig  
Дата: 26.04.20 02:57
Оценка:
SK>query.select(QPP.reservedQuantity.sum().coalesce(0F).asNumber().floatValue());

А ради чего всё это? Я бы использвал JPQL, раз уж какой-то JPA в проекте есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.