Я работаю с 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
Хорошо работает, если я пишу запрос подсчета внутри файла репозитория, но это не цель.
Есть идеи, что это происходит?
Спасибо и всего наилучшего.