JPA NamedQuery - игнорировать строку, когда переданное поле равно нулю - PullRequest
0 голосов
/ 25 октября 2018

Итак, у меня есть NamedQuery, где поля передаются через enityManager.createNamedQuery из репо.

Таким образом, у меня есть два поля, areaId и fieldId, areaId всегда будет присутствовать, но иногда fieldId будет нулевым.

Как пропустить (удалить) следующую строку, если: fieldId имеет значение null

and summary.bucket.fieldId.id = :fieldId --line to be removed

Ниже приведена моя попытка использования сценария случая, но это не работает.

Я открыт для лучшего подхода или руководства по этому вопросу, пожалуйста?

 @NamedQuery(name = "SummaryBySubstatus.getInfo",
            query = "select new com.model.group.summaryGroup(summary.bucket.area.id,"
                    summary.bucket.facilityProductInfo,
                    from SummaryBySubstatus as summary
                    where summary.bucket.area.id = :areaId
                    and summary.bucket.fieldId.id = :fieldId
                    ---Tried This way---
                    and(case when :fieldId != null then summary.bucket.fieldId.id = :fieldId end)"

1 Ответ

0 голосов
/ 25 октября 2018
and summary.bucket.fieldId.id = :fieldId

Это всегда будет иметь значение false, когда fieldId равно нулю в совместимых базах данных (не MySQL).Попробуйте

where summary.bucket.area.id = :areaId
and ( :fieldId IS NOT NULL AND summary.bucket.fieldId.id = :fieldId
or :fieldId IS NULL AND summary.bucket.fieldId.id = :fieldId )

А если вы используете PostgreSQL, есть ошибка, которую нужно обойти, вызвав

query.setParameter("fieldId", not_null_value_of_the_same_type);
query.setParameter("fieldId", the_real_value_that_can_be_null);

Или вы можете просто создать два запроса.

...