Аннотации запросов JPQL с ограничением и смещением
У меня есть интерфейс репозитория с некоторыми абстрактными методами, где я использую аннотацию @Query.
Теперь я хотел бы добавить поддержку ограничений и смещения для этих запросов.
Пример:
public interface ProductRepository
extends CrudRepository<Product, Long> {
@Query("from Product")
List<Product> findAllProducts();
}
что-то вроде этого было бы хорошо
public interface ProductRepository
extends CrudRepository<Product, Long> {
@Query("from Product limit :limit ")
List<Product> findAllProducts(@Param("limit") Integer limit);
}
Но это не работает. Существует решение, которое я создаю для реализации интерфейса (http://stackoverflow.com/info/3479128/jpql-limit-number-of-results)
Но мне интересно, нет ли возможности добавить смещение и ограничение для запроса или если для этого есть аннотация.
Ответы
Ответ 1
limit
не поддерживается JPQL. Даже без этого ваши запросы недействительны JPQL-запросы (но могут быть действительными HQL - и могут работать, если ваш поставщик JPA терпимо).
Требуется A (частичная) реализация, чтобы вы могли использовать интерфейс Query
или критерии api.
Ответ 2
+1 тому, что пользователь "его" сказал в комментарии:
"стандартным способом решения основной проблемы является использование PagingAndSortingRepository"
Вот пример. Я собираюсь сортировать как дополнительный бонус:
public interface ArtifactRepo extends JpaRepository<Artifact, Long> {
Page<Artifact> findByComponentKey(String componentKey, Pageable pageable);
}
(Вы можете использовать @Query выше, если хотите, но JPQL не поддерживает пределы, как отметил его "."
Затем, вызывая его, используйте
PageRequest pageRequest =
new PageRequest(0, 1, Sort.Direction.DESC, "buildNumber");
Page<Artifact> artifactsPage =
artifactRepo.findByComponentKey(componentKey, pageRequest);
Я написал различные сообщения в блогах по этой теме, которые могут оказаться полезными:
http://springinpractice.com/blog/categories/chapter-02-data/