Я использую JPA для получения данных из базы данных Postgres путем запроса таблицы.Один из столбцов моей таблицы - jsonb.И фрагмент столбца jsonb из этой таблицы выглядит так:
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
{"name": "Robert", "surname": null, "app_number": "46323876"}
{"name": "Franck", "surname": "Ribery", "app_number": "46323877"}
Я хотел бы реализовать фильтрацию и исключить нулевые значения в результате.Чтобы сделать это, я запрашиваю таблицу, используя этот фрагмент кода:
@Query(value = "SELECT * FROM request_data rd\n" +
" WHERE(rd.params ->> 'name' = NULLIF(?1,'') is NULL or (rd.params ->> 'name' = ?1 and rd.params ->> 'name' != 'null'))\n" +
" and (rd.params ->> 'surname' = NULLIF(?2,'') is NULL or (rd.params ->> 'surname' = ?2 and rd.params ->> 'surname' != 'null'))\n" +
" and (rd.params ->> 'app_number' = NULLIF(?3,'') is NULL or (rd.params ->> 'app_number' = ?3 and rd.params ->> 'app_number' != 'null')) order by created_at DESC", nativeQuery = true)
List<RequestData> findTest(String name, String surname, String appNumber);
Например, я хотел бы получить все записи по surname = "Lewandowski", и я ожидаю следующеерезультат:
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
Но вместо него я получил две строки, в том числе surname = null
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
{"name": "Robert", "surname": null, "app_number": "46323876"}
Я пробовал несколько разных запросов и синтаксисов, но пока не могуизбавиться от нулевых значений в моем результате.