2016-05-14 31 views
2

我正在使用JHipster管理付款並希望過濾用戶可以看到的付款,以便他只能看到他的付款。爲此,我在Youtube上關注Matt Raible的blog tutorial。他使用由JHipster生成的findByUserIsCurrentUser()。不兼容的類型列表和頁面

List<Blog> blogs = blogRepository.findByUserIsCurrentUser(); 

當我去讓我的項目中同樣的變化,我發現我必須返回一個頁面,我得到一個不兼容的類型錯誤的類型,這裏是我的方法:

public Page<Payment> findAll(Pageable pageable) { 
    log.debug("Request to get all Payments"); 
    Page<Payment> result = paymentRepository.findByUserIsCurrentUser(); 
    return result; 
} 

如果我改變這在PaymentRepository宣佈的findAll(分頁)爲findByUserIsCurrentUser()如下

public interface PaymentRepository extends JpaRepository<Payment,Long> { 
    @Query("select payment from Payment payment where payment.user.login = ?#{principal.username}") 
    List<Payment> findByUserIsCurrentUser(); 
} 

我得到以下錯誤:

Error

我該如何解決這個問題?

回答

2

您可以通過兩種方式解決此問題。這是假設你正在使用的服務,如果沒有它仍然很相似:

方法1:如果你希望你的服務來回報所有的款項爲當前用戶,那麼你需要修改你的服務,可能你的資源來處理,而不是頁面的列表:

public List<Payment> findAll() { 
    log.debug("Request to get all Payments"); 
    List<Payment> result = paymentRepository.findByUserIsCurrentUser(); 
    return result; 
} 

而在你的資源:

public List<Payment> getAllPayments() { 
    log.debug("REST request to get all Payments"); 
    List<Payment> payments = paymentService.findAll(); 
    return payments; 
} 

或者,您可以在改變"pagination": "pagination"到並重新運行發生器。這將重新生成沒有分頁的服務,資源和存儲庫。

方法2:如果你希望你的服務是分頁,你需要改變你的資料庫的方法來接受Pageable對象,並返回一個頁面:

public interface PaymentRepository extends JpaRepository<Payment,Long> { 
    @Query("select payment from Payment payment where payment.user.login = ?#{principal.username}") 
    Page<Payment> findByUserIsCurrentUser(Pageable pageable); 
} 

然後,你需要通過分頁從服務對象:

public Page<Payment> findAll(Pageable pageable) { 
    log.debug("Request to get all Payments"); 
    Page<Payment> result = paymentRepository.findByUserIsCurrentUser(pageable); 
    return result; 
} 

這將返回結果的子集的基礎上,無論pageable對象包含。這包括大小,頁碼,膠印和排序。例如,大小爲20,頁號爲0將返回前20個結果。將頁碼更改爲1將返回接下來的20個結果。這些參數通常從前端傳遞到您的API - 您會注意到getAllPayments()PaymentResource中有一個Pageable參數。

+0

完美地工作,非常感謝您的詳細幫助!我使用分頁解決方案。 – Ivan