Задать вопрос
@Wan-Derer
Зобанели на Хабре, волки́ ;((

Spring Data JPA, как написать произвольный запрос?

В репозитории можно писать запросы типа
@Query("select FIELD1, FIELD2 from TABLE")
List<MyPOJO> getAllPojo();

и даже передавать в Query параметры.
Вопрос - а можно ли передавать в Query всю строку запроса?

У меня такой шаблон запроса:
select FIELD1, FIELD2 from TABLE
where
      CRITERIA1 = 111 and
      CRITERIA2 = '222' and
      CRITERIA3 in (1, 2, 3) and
      CRITERIA4 in ('one',  'two',  'three')
;

Проблема в том что мне в разных случаях надо включать или выключать разные критерии, т.е. в запрос могут войти один или несколько, или все критерии. Я могу сформировать строку запроса, но как передать её Спрингу?
На низком уровне, через JdbcTemplate умею, но м.б. есть что-то готовое?
  • Вопрос задан
  • 633 просмотра
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 2
al_gon
@al_gon
в Spring JPA надо использовать спецификации(предикаты)
org.springframework.data.jpa.domain.Specification

Их можно делать как и комплексными так и комбинировать друг с другом.
https://spring.io/blog/2011/04/26/advanced-spring-...
Ответ написан
Комментировать
@jz36
Можно использовать просто @Query, как вы и делаете.

Например:

@Query(value = "select FIELD1, FIELD2 from TABLE
where
      CRITERIA1 = :criteria1 and
      CRITERIA2 = :criteria2 and
      CRITERIA3 in :criteria3 and
      CRITERIA4 in :criteria4", native = true);

List<MyPOJO> getAllPojo(@Param Integer criteria1, @Param String criteria2, @Param List<Integer> criteria3, @Param List<String> criteria4);


так же можно обойтись и без native=true если вы будете писать на JPQL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:12
10000 руб./за проект
22 дек. 2024, в 19:47
3000 руб./за проект
22 дек. 2024, в 19:03
60000 руб./за проект