«.count» не работает внутри файла Spring jpa-named-queries.properties в запросе с возможностью постраничного вывода - PullRequest
1 голос
/ 20 апреля 2020

Я работаю с Spring Batch, и мне приходится выводить запросы, которые использует мой проект из-за требований. Я столкнулся со следующей проблемой, связанной с запросом подсчета внутри репозитория JPA с использованием разбиения на страницы:

Hibernate: select * from ( SELECT DISTINCT column1 AS RID, column2 AS TYPE FROM mytable WHERE TYPE = 'X' AND TRIM(column3) IN (?, ?, ?) order by RID asc ) where rownum <= ?
Hibernate: select count(DISTINCT WHERE) FROM mytable WHERE TYPE = 'X' AND TRIM(column3) IN (?, ?, ?)
2020-04-20 09:45:43,464 ERROR: o.h.e.j.s.SqlExceptionHelper [main] ORA-00936: missing expression

Как видите, сформированный запрос подсчета не имеет смысла.

Файл jpa-named-queries.properties (\ src \ main \ resources \ META-INF) содержит следующее:

Operation.getItems=SELECT DISTINCT column1 AS RID, column2 AS TYPE FROM mytable WHERE TYPE = 'X' AND TRIM(column3) IN :list
Operation.getItems.count

И определение хранилища выглядит следующим образом:

@Repository
public interface ItemsRepository extends JpaRepository<MyClass, String> {

    @Query(
            name = "Operation.getItems",
            nativeQuery = true
            )
    public Page<MyClass> findAllItems(@Param("list") List<String> myList, Pageable pageable);
} 

У меня та же ошибка, если я использую "countName" внутри аннотации @Query:

jpa-named-queries.properties (обратите внимание, что в B вместо DISTINCT указано другое):

Operation.getItems=SELECT DISTINCT column1 AS RID, column2 AS TYPE FROM mytable WHERE TYPE = 'X' AND TRIM(column3) IN :list
Operation.getItemsB=SELECT COUNT(*) FROM (SELECT distinct column1 AS RID, column2 AS TYPE FROM mytable WHERE TYPE = 'X' AND TRIM(column3) IN :list)

Репозиторий:

@Repository
public interface ItemsRepository extends JpaRepository<MyClass, String> {

    @Query(
            name = "Operation.getItems",
            nativeQuery = true,
            countName = "Operation.getItemsB"
            )
    public Page<MyClass> findAllItems(@Param("list") List<String> myList, Pageable pageable);
} 

Ошибка:

Hibernate: select count(distinct WHERE) FROM mytable WHERE TYPE = 'X' AND TRIM(COLUMN3) IN (?, ?, ?)
2020-04-20 10:36:39,936 ERROR: o.h.e.j.s.SqlExceptionHelper [main] ORA-00936: missing expression

Хорошо работает, если я пишу запрос подсчета внутри файла репозитория, но это не цель.

Есть идеи, что это происходит?

Спасибо и всего наилучшего.

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