2012-02-24 33 views
11

@ Query ek açıklamasını kullandığım bazı soyut yöntemlerle bir havuz arabirim var. Şimdi bu sorgulara limit ve ofset desteği eklemek istiyorum.Sınır ve Ofset ile JPQL Sorgulama Notu

örnek: Böyle

public interface ProductRepository 
    extends CrudRepository<Product, Long> { 

    @Query("from Product") 
    List<Product> findAllProducts(); 
} 

şey

public interface ProductRepository 
    extends CrudRepository<Product, Long> { 

    @Query("from Product limit :limit ") 
    List<Product> findAllProducts(@Param("limit") Integer limit); 
} 

güzel olurdu Ama bu işe yaramaz. Arayüzün bir uygulaması yarattığım bir çözüm var (http://stackoverflow.com/questions/3479128/jpql-limit-number-of-results) Ancak, ofset ve limit ekleme imkanı olup olmadığını merak ediyorum. sorguya veya bunun için bir ek açıklama varsa. JP12 tarafından desteklenmiyor.

+0

Neden yöntemi uygulamıyor ve JPA API'sini kullanmıyorsunuz? Ek açıklamalar güzel, ancak tüm Java kodunuzu değiştirmemeleri gerekiyor. –

+1

Spring'in depo arayüzlerini kullanmanın ve genişletmenin standart yoludur. –

+2

Bunu yazarken ... temel sorunu çözmenin standart yolu 'PagingAndSortingRepository' kullanmaktır. –

cevap

5

limit, JPQL tarafından desteklenmemektedir. O olmasa bile, sorgularınız geçerli JPQL queries (geçerli HQL olabilir ve JPA sağlayıcınız hoşgörülü ise işe yarayabilir) geçerli değildir.

Query arabirimini veya api ölçütlerini kullanabilmeniz için A (kısmi) bir uygulama gereklidir. hangi kullanıcı "onun" yorumunda söz konusu

9

1:

"temel sorunu çözmek için standart bir yol PagingAndSortingRepository kullanmaktır"

İşte bir örnek. Ben bir avantaj olarak sadece sıralamaya atıyorum:

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

(İsterseniz yukarıdaki @query kullanabilirsiniz, ancak "onun" belirtildiği gibi JPQL kendisi sınırlarını desteklemez.)

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

: it çağrılırken Sonra ben yararlı olabilir bu konu hakkında çeşitli blog mesajları yazdı

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

kullanmak