Аннотации запросов 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/