Как вставить переменную в Query Spring Boot
У меня есть такой Query:
@Modifying
@Query( value = " select * " +
" from tabela_testowa t1 " +
" where not exists ( " +
" select id " +
" from tabela_testowa t2 " +
" where t2.id <> t1.id and ( " +
" t2.kolumna1 = t1.kolumna2 or " +
" t2.kolumna3= t1.kolumna2 " +
" ) " +
" ) ", nativeQuery = true)
List<Test> getAllUniqColumn(@Param("mainColumn") String mainColumn,
@Param("secondColumn") String secondColumn,
@Param("thirdColumn") String thirdColumn);
Я хочу заменить на:
@Modifying
@Query( value = " select * " +
" from tabela_testowa t1 " +
" where not exists ( " +
" select id " +
" from tabela_testowa t2 " +
" where t2.id <> t1.id and ( " +
" :secondColumn = :mainColumn or " +
" :thirdColumn = :mainColumn " +
" ) " +
" ) ", nativeQuery = true)
List<Test> getAllUniqColumn(@Param("mainColumn") String mainColumn,
@Param("secondColumn") String secondColumn,
@Param("thirdColumn") String thirdColumn);
Но к сожалению второй вариант кода не работает правильно. Вместо того чтобы фильтровать данные он возвраает все даные из таблицы. Как заменить sql код на переменную?
Ответы (1 шт):
Автор решения: Nofate
→ Ссылка
В общем случае вы не можете подставлять названия колонок через параметры в запросы. Только конкретные значения (строки в кавычках, числа и т.п.).
Скорее всего вам придется "склеить" запрос руками. Можно сделать это:
- на стороне СУБД: сделайте хранимую процедуру, которая принимает названия столбцов, склеивает запрос, вызовите ее через
@Query("call my_proc(:mainColumn, :secondColumn: :thirdColumn)); - на стороне java: откажитесь от JPA для данного запроса и обработайте его через JDBC или
JDBCTemplateспринга.