我正在使用 Spring Data JPA 和 Hibernate 開發 Spring Boot,并且在嘗試使可分頁存盤庫方法時遇到以下問題。
如果我使用諸如findAll()之類的方法,則使其可調整非常簡單。例如,我有這個服務方法,我呼叫findAll()存盤庫方法,將Pageable物件傳遞給它:
@Override
public Page<WalletDTO> getAllWalletsList(Pageable pageable) throws NotFoundException {
Page<Wallet> walletsList = this.walletRepository.findAll(pageable);
if(walletsList.isEmpty()) {
throw new NotFoundException(String.format("There are no wallet in the whole system !!!"));
}
return walletsList.map(m -> conversionService.convert(m, WalletDTO.class));
}
它完美地作業。
但現在我有了這個存盤庫介面:
public interface WalletRepository extends JpaRepository<Wallet, Integer> {
List<Wallet> findByUser_Id(Integer id);
List<Wallet> findByWalletType_Name(String walletName);
List<Wallet> findByWalletType_WalletType(WalletType walletType, Pageable pageable);
Wallet findByAddress(String address);
}
我能做些什么來使一個方法變得可行,我試圖做這樣的事情:
List<Wallet> findByWalletType_WalletType(WalletType walletType, Pageable pageable);
但我不知道這是否是一個解決方案。實作此行為的正確方法是什么?
uj5u.com熱心網友回復:
根據春季檔案
我們還提供了特定于持久性技術的抽象,例如 JpaRepository 或 MongoRepository。這些介面擴展了 CrudRepository 并公開了底層持久性技術的功能,以及相當通用的與持久性技術無關的介面,例如 CrudRepository。
在 CrudRepository 之上,有一個PagingAndSortingRepository 抽象,它添加了額外的方法來簡化對物體的分頁訪問
因此,通過擴展JpaRepository您已經繼承PagingAndSortingRepository,您可以使用分頁公開方法,這將由 Spring 自動實作。
同樣根據spring doc,您有以下示例將由Spring data JPA自動實作
示例 14. 在查詢方法中使用 Pageable、Slice 和 Sort
Page findByLastname(String lastname, Pageable pageable);
切片 findByLastname(String lastname, Pageable pageable);
List findByLastname(String lastname, Pageable pageable);
因此,在您的情況下,您將有以下選擇
Page<Wallet> findByWalletType_WalletType(WalletType walletType, Pageable pageable);
Slice<Wallet> findByWalletType_WalletType(WalletType walletType, Pageable pageable);
List<Wallet> findByWalletType_WalletType(WalletType walletType, Pageable pageable);
閱讀檔案以獲取更多詳細資訊,選擇您喜歡的那個,您應該會很好!
只是最后一個提示。為了使您已經宣告的名稱WalletType_WalletType起作用,這意味著Wallet具有一個名為的欄位WalletType,然后WalletType還有一個具有名稱的欄位WalletType。這似乎有點奇怪。
uj5u.com熱心網友回復:
此外,您可以回傳 aPage<T>或 a ,而不是直接回傳您的型別Slice<T>。主要區別在于頁面將觸發額外的計數(例如用于顯示尋呼機),而切片只知道是最后一個(用于無限滾動)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/428668.html
上一篇:PanacheEntity-在投影到DTO期間,在panache物體中出現QuerySyntaxException意外令牌
