I am using JPA to get data from Postgres Database by querying a table. One of the column of my table is jsonb. And a snippet of jsonb column from that table looks like that:
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
{"name": "Robert", "surname": null, "app_number": "46323876"}
{"name": "Franck", "surname": "Ribery", "app_number": "46323877"}
I would like to implement a filtering and exclude null values in a result. In order to do that I am querying the table by using this piece of a code:
@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);
For example, I would like to get all entries by surname = "Lewandowski", and I am expecting the following result:
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
But instead of it I got two rows including surname = null
{"name": "Robert", "surname": "Lewandowski", "app_number": "46323875"}
{"name": "Robert", "surname": null, "app_number": "46323876"}
I have tried a number of differents queries and syntaxes but, so far, I can not rid of null values in my result.