Получить все записи столбца в Spring Data JPA, даже если мы указываем его как параметр - PullRequest
0 голосов
/ 27 декабря 2018

Существует таблица с именем zipcode, в которой столбцы обозначены id, zip, city, state.

. В нашем случае мы хотим получить записи на основе либо id, либо zip, либо city, либо state.

Общий SQL запрос выглядит следующим образом:

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state=state;

Если мы хотим получить определенное состояние, то мы заменим значение состояния с указанным именем..

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state='California';

Если нам нужен определенный город, то мы можем написать

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city='Los Angles' AND state=state;

Проблема с JPA для Spring Data заключается в том, что если мы напишем метод

@Query(value = "SELECT * FROM zipcode WHERE id=?1 AND zip=?2 AND city=?3 AND state=?4", nativeQuery = true)
List<Zipcode> getZipCodes(Integer id, Integer zip, String city, String state)

Я хочу получить все города, но только определенное государство, тогда я не могу использовать этот метод, например, как я могу использовать вышеупомянутый запрос SQL, где нам просто нужно заменить значение столбца.

Как мы можем добиться этого в Spring Data JPA, используя собственный запрос?

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Попробуйте,

@Query(value = "SELECT * FROM zipcode WHERE  (id=?1 or ?1 is null) AND (zip=?2 or ?2 is null) AND  (city=?3 or ?3 is null)  AND (state=?4 or ?4 is null) ", nativeQuery = true)
List<Zipcode> getZipCodes(Integer id, Integer zip, String city, String state)
0 голосов
/ 26 августа 2019

Использовать параметры данных jpa данных весны

@Query(value = "SELECT * FROM zipcode WHERE id=:id AND (zip=:zip or :zip is null) AND  (city=:city or :city is null)  AND (state=:state or :state is null) ", nativeQuery = true)
List<Zipcode> getZipCodes(@Param("id") Integer id, @Param("zip") Integer zip, @Praram("city) String city, @Param("state") String state)
0 голосов
/ 27 декабря 2018

Я не знаю, есть ли у Spring Data способ сделать это одним способом, но вы можете попробовать использовать Пример:

public List<Zipcode> getZipcodes(Integer id, Integer zip, String city, String state){
  Zipcode zipcode = new Zipcode();
  if (id != null)
    zipcode.setId(id);
  if (zip != null)
    zipcode.setZip(zip);
  ...
  return zipcodeRepository.findAll(Example.of(zipcode));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...