Не передаются параметры метода репозитория в запрос @Query

В чем проблема: Есть следующий репозиторий:

@Repository
public interface StoriesGroupRepository extends JpaRepository<StoriesGroup, Long> {

    @Query(
        value = "SELECT * FROM stories_group " +
                "JOIN group_browsing_history " +
                  "ON group_browsing_history.group_id = stories_group.stories_group_id " +
                "JOIN customers " +
                  "ON customers.customer_id = group_browsing_history.customer_id " +
                "where stories_group.is_active = :isActive and customers.external_id = :externalId",
        nativeQuery = true
    )
    public List<StoriesGroup> getWatchedStoriesBy(@Param("isActive") boolean isActive,
                                                  @Param("externalId") String externalId);
}

Метод getWatchedStoriesBy возвращает пустой список при абсолютно любых параметрах, даже в тех случаях, когда для указанных параметров есть данные в БД.

Мои настройки (файл application.properties):

logging.config=classpath:log/logback.xml

server.port=8080
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:postgresql://localhost:5432/Stories
spring.datasource.username=postgres
spring.datasource.password=my_password;
spring.datasource.initialization-mode=always
spring.datasource.continue-on-error=true
spring.jpa.show-sql=true

Как я пытался решить проблему:

  1. сперва я протестировал сам запрос в БД через pgAdmin. Запрос корректно отрабатывал для всех тестовых данных.

  2. Далее я проверил код, который вызывает getWatchedStoriesBy - во всех случаях код корректно передавал параметры этому методу.

  3. Потом я попробовал убрать параметры у метода getWatchedStoriesBy, а вместо :isActive и :externalId подставил конкретные значения для которых есть данные в БД. И метод корректно отработал.

  4. Затем я вернул параметры на место и проверил как выглядит sql запрос переданный Hibernet (установив spring.jpa.show-sql=true) и увидел следующее

    SELECT * FROM stories_group 
      JOIN group_browsing_history
        ON group_browsing_history.group_id = stories_group.stories_group_id 
      JOIN customers 
        ON customers.customer_id = group_browsing_history.customer_id 
      where stories_group.is_active = ? and customers.external_id = ?
    

и если я правильно понимаю, то знаки вопроса показывают, что значение параметров отмеченных @Param не передалось методу. А почему - не имею ни малейшего понятия. При всем при этом не возникает никаких исключений.

Вопрос: почему параметры метода getWatchedStoriesBy не попадают в итоговый sql запрос? Как это починить?


Ответы (0 шт):