Как создать запрос jpa, который принимает несколько (динамическое) количество диапазонов для предложения между, чтобы получить результаты - PullRequest
0 голосов
/ 25 октября 2019

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

Например, список диапазона может содержать

  • от 10 до 20
  • от 25 до 30
  • от 32 до 40

Таким образом, машины, имеющие емкость между любыми из вышеуказанных диапазонов, должны быть выбраны.

Вот мой собственный запрос, который работает только для одного элемента из диапазонов емкости. Как сделать его динамическим, чтобы он поддерживал несколько таких мощностейMin изначения CapacityMax.

Заранее спасибо.

    @Query(value = "SELECT * FROM machine m where m.status='A' " + 
            "and (:capacityMin IS NULL or (m.capacity>= :capacityMin and m.capacity<= :capacityMax))" , nativeQuery=true)
    public List<Object[]> searchMachines(@Param("capacityMin") Integer capacityMin,@Param("capacityMax") Integer capacityMax); 

1 Ответ

0 голосов
/ 25 октября 2019

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

@Query(value = "SELECT * FROM machine m where m.status='A' " + 
            "and (:capacityMin IS NULL or (m.capacity>= :capacityMin ) " +
            "and (:capacityMax IS NULL or (m.capacity<= :capacityMax )" , nativeQuery=true)
    public List<Object[]> searchMachines(@Param("capacityMin") Integer capacityMin,@Param("capacityMax") Integer capacityMax); 

Если у вас есть много дополнительных параметров, вы можете лучше использовать уже упомянутый Criteria API или QueryDSL * 1004. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...