JPA Query для обработки значения параметра NULL

83
12

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


@Query(value = "SELECT ord.purchaseOrderNumber,ord.salesOrderNumber,ord.quoteNumber"

+ " FROM Order ord WHERE ord.purchaseOrderNumber LIKE :poNumber% "
+ " AND ord.salesOrderNumber LIKE :soNumber "
+ " AND ord.quoteNumber = :quoteNumber "


пример выше, если мой входной параметр: quoteNumber равен NULL, тогда я не должен фильтровать по ord.quoteNumber = NULL, поэтому как избежать этого

спросил(а) 2015-02-17T07:46:00+03:00 5 лет, 8 месяцев назад
1
Решение
91

Вы можете добавить набор условий для "игнорировать" свойства с нулевыми значениями или пустыми строками.


например.

+ " AND (ord.quoteNumber = :quoteNumber or :quoteNumber is null or :quoteNumber = '' ")

ответил(а) 2016-07-22T21:17:00+03:00 4 года, 3 месяца назад
41

Вы можете использовать что-то вроде этого
: quoteNumber = -999 AND ord.quoteNumber =: quoteNumber


и передать запрос -999, если вы хотите передать null.


Я пытаюсь проверить, можно ли по умолчанию использовать его -999 с помощью @parma

ответил(а) 2015-07-15T21:42:00+03:00 5 лет, 3 месяца назад
42

К сожалению, сопоставление не работает с нулевыми значениями, для чего у вас есть предикат IS NULL, IS NOT NULL. Что это означает, что вам нужны разные запросы для случаев, когда вы цитируете номер NULL, и это не так. Вы можете проверить значение null в своем java-коде, а затем выбрать правильный запрос для вызова.
Если другим номером котировки не может быть пустых строк ( ") (которые они не должны), то вы можете представить отсутствие заданного числа в качестве пустой строки и всегда использовать нормальное сравнение. Просто помните, чтобы установить вашу схему БД, чтобы столбцы не могли быть нулевыми, а значения по умолчанию для них -" ".
BTW Имена столбцов предполагают номера, но вы используете сравнение строк. Я надеюсь, что все в порядке.

ответил(а) 2015-02-17T15:54:00+03:00 5 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема