Запрос Spring Data JPA с необязательными параметрами

У меня есть конечная точка GET, которая извлекает данные на основе следующих параметров. firstName является обязательным, а остальные необязательны.

{

"firstName:"",
"lastName:"",
"Gender:"",
"city"""

}

Как мне подойти к запросу базы данных? я использую Sring Data JPA, я пробовал

findByFirstNameOrLastNameOrGenderOrCity(имя,фамилия,пол,город)

Не уверен, что собственный SQL-запрос с использованием аннотации @Query будет работать, поскольку любое из значений, кроме firstName, может быть нулевым, если потребитель конечной точки не отправляет значения. Пожалуйста, помогите


person Vinay Vullakula    schedule 08.03.2018    source источник


Ответы (1)


Если вам нужно что-то вроде этого:

GET /myEntities?firstName=bla-bla&lastName=bla-bla&gender=1&city=bla-bla

где firstName является обязательным, а остальные необязательными,

то вы можете использовать такой запрос:

@Query("select e from MyEntity e where e.firstName = ?1 " +
    "and (?2 is null or e.lastName = ?2) " + 
    "and (?3 is null or e.gender = ?3) " +
    "and (?4 is null or e.city = ?4)")
List<MyEntities> getByFilter(String firstName, String lastName, Boolean gender, String city);
person Cepr0    schedule 09.03.2018
comment
@Cerp0 Я пробовал этот запрос, но он не возвращает результаты, как ожидалось, в моем случае у меня будет только одна запись, когда будут переданы все параметры, включая необязательные параметры, но почему-то он принимает нулевые значения --- вот что его печать в консоли bind =› [мужской, мужской, ноль, ноль, ноль, ноль, firstNmae, firstNmae, lastName, lastName] - person Vinay Vullakula; 10.03.2018
comment
@VinayVullakula Извините, я не понял, что вы имеете в виду) Не могли бы вы привести подробный пример (в вашем вопросе), чего вам нужно достичь? - person Cepr0; 14.03.2018