2012-02-24 15 views
11

私は@Queryアノテーションを使用するいくつかの抽象メソッドを持つリポジトリインタフェースを持っています。 これで、このクエリに制限とオフセットのサポートを追加したいと思います。制限とオフセットを持つJPQLクエリアノテーション

例:

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/questions/3479128/jpql-limit-number-of-results)の実装を作成する解決策があります しかし、オフセットと制限を追加する可能性がないのだろうかまたはそのための注釈があるかどうかを判定します。

+0

単にメソッドを実装してJPA APIを使用するのはなぜですか?注釈はクールですが、あなたのJavaコードをすべて置き換えるものではありません。 –

+1

これは、Springのリポジトリインタフェースを使用および拡張するための標準的な方法です。 –

+2

これを書く...基本的な問題を解決する標準的な方法は、 'PagingAndSortingRepository'を使うことです。 –

答えて

5

limitは、JPQLではサポートされていません。それがなくても、クエリは有効ではありませんJPQL queries(有効なHQLかもしれません - JPAプロバイダが寛容であれば動作するかもしれません)。

Queryインターフェイスまたは基準apiを使用できるように、部分実装が必要です。 「彼」のコメントで言ったユーザーへ

9

1:

「根本的な問題を解決するための標準的な方法はPagingAndSortingRepositoryを使用することですが、」ここでは一例です。私はおまけとして仕分けで投げています:

public interface ArtifactRepo extends JpaRepository<Artifact, Long> { 
    Page<Artifact> findByComponentKey(String componentKey, Pageable pageable); 
} 

(あなたが好きな場合は、上記の@query使用することができますが、「彼は」で述べたようJPQL自体が、限界をサポートしていません。)

http://springinpractice.com/blog/categories/chapter-02-data/

:それを呼び出すときに、私が参考になるかもしれないこの話題、上で様々なブログ記事を書いた

PageRequest pageRequest = 
    new PageRequest(0, 1, Sort.Direction.DESC, "buildNumber"); 
Page<Artifact> artifactsPage = 
    artifactRepo.findByComponentKey(componentKey, pageRequest); 

使用

関連する問題