Информация об изменениях

Сообщение queryDsl и preapredStatements (coalesce) от 24.04.2020 9:57

Изменено 24.04.2020 10:20 SkyKnight

queryDsl и preapredStatements (coalesce)
Добрый день,

сразу скажу, что у меня не очень много опыта с 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, но пока не придумал как это сделать там.

Заранее спасибо.
queryDsl и preapredStatements (coalesce)
Добрый день,

сразу скажу, что у меня не очень много опыта с 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());


Вот тут, правда, говорят, что должно сразу значение подставляться. Но у меня что-то нет.