Как привести нулевую дату в спящий режим nativeQuery? - PullRequest
0 голосов
/ 15 октября 2019

Я использую PostgreSQL и Hibernate. Поскольку я использую SQL-запросы, которые не учитываются в спящем режиме, я использую nativeQuery в своей аннотации Query. У меня есть несколько параметров даты, и неизбежно, по крайней мере две из них являются нулевыми

Я должен проверять условие, только если мой параметр не равен нулю. Проблема в том, что я не могу разыграть свою дату, если эта дата пуста.

Я пробую разные возможные решения, но ничего не получается

  • :dEchTransacEqual is null OR transaction.d_ech_transac = cast(:dEchTransacEqual as date)

  • coalesce(:dEchTransacGreaterThanEqual, null) is null OR transaction.d_ech_transac >= cast(:dEchTransacGreaterThanEqual as date)

  • CASE cast(:dEchTransacGreaterThanEqual as date) WHEN not null THEN transaction.d_ech_transac >= cast(:dEchTransacGreaterThanEqual as date) END
  • CASE coalesce(cast(:dEchTransacGreaterThanEqual as boolean), null) WHEN not null THEN transaction.d_ech_transac >= cast(:dEchTransacGreaterThanEqual as date) END
  • to_date(cast(:dEchTransacGreaterThanEqual as date), 'YYYY/MM/DD') is null OR transaction.d_ech_transac >= cast(:dEchTransacGreaterThanEqual as date)
  • :dEchTransacGreaterThanEqual is null OR transaction.d_ech_transac >= to_date(cast(:dEchTransacGreaterThanEqual as date), 'YYYY/MM/DD')

У меня нет больше идей, чтобы решить мою проблему. Как я могу справиться с недействительностью моей даты, используя nativeQuery из hibernate?

Последнее (и грязное) решение состоит в том, чтобы реализовать столько методов репо, сколько у меня было вариантов использования (3).

PS. : Мне нужно использовать nativeQuery, потому что я использую over () и раздел, который не обрабатывается Hibernate.

1 Ответ

0 голосов
/ 16 октября 2019

Похоже, PG не поддерживает тест "IS NULL" для параметров. Это означает, что вы должны построить запрос динамически. Если вы не хотите манипулировать строками, вы можете использовать Динамические запросы FluentJPA, которые также поддерживают OVER предложение .

...