簡體   English   中英

使用Spring Data JPA和@Query注釋僅獲取第一個/最后一個元素

[英]Fetching only first/last element using Spring Data JPA and @Query annotation

編輯:有關此問題的第二和第四個答案提供了解決此問題的解決方案有關Spring-Data-JPA注釋的setMaxResults?

目標:使用Spring Data JPA存儲庫和Spring Query注釋,按屬性z獲取最大/最小元素。

到目前為止我有什么

@Query("SELECT xelement FROM x xelement ORDER BY xelement.z")
public List<X> findFirstElement();

問題:此查詢獲取所有元素(這不是真正有效)。 如果我直接使用EntityManager,我可以使用設置結果的數量

entityManager.setMaxResults(1)

只獲得第一個元素。

問題:如何使用@Query注釋指定最大結果數?

想法:使用大小為0的PageRequest還是要走的路?

約束:我知道“FindFirstBy ....”查詢功能,但我想/必須使用@Query注釋。

只需將nativeQuery添加到@Query注釋即可使用sql的limit屬性。 但是,還有另一種更好的方法。 存儲庫方法中的可分頁類將在不觸及@Query注釋的情況下解決您的問題:

@Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z")
List<X> findFirstElement(Pageable limit);

要設置限制和偏移量,請使用以下方法調用此存儲庫方法:

List<X> xValues = xRepository.findFirstElement(new PageRequest(0, 1));

這里1對應於您想要的限制。

更新(春季數據2.0)

使用PageRequest.of(0,1)而不是新的PageRequest(0,1)

嘗試這樣做:

@Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z  LIMIT 1",
       nativeQuery = true)

我能為您的用例考慮的最接近的JPA查詢語法是findFirstByZIsNotNullOrderByZAsc 這應該消除了編寫自定義本機查詢的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM