我正在使用JHipster开发一个webapp来管理付款,并希望过滤用户可以看到的付款,这样他才能看到他的付款。为此,我在Youtube上关注了来自Matt Raible的blog tutorial。他使用由JHipster生成的findByUserIsCurrentUser()。
List<Blog> blogs = blogRepository.findByUserIsCurrentUser();
当我在我的项目中进行相同的更改时,我发现我必须返回的类型是一个Page,我得到一个不兼容的类型错误,这是我的方法:
public Page<Payment> findAll(Pageable pageable) {
log.debug("Request to get all Payments");
Page<Payment> result = paymentRepository.findByUserIsCurrentUser();
return result;
}
如果我更改了在PaymentRepository中声明的findByUserIsCurrentUser()的findAll(可分页),如下所示
public interface PaymentRepository extends JpaRepository<Payment,Long> {
@Query("select payment from Payment payment where payment.user.login = ?#{principal.username}")
List<Payment> findByUserIsCurrentUser();
}
我收到以下错误:
我该如何解决这个问题?
答案 0 :(得分:3)
您可以通过两种方式解决此问题。这假设您正在使用某项服务,如果不是,它仍然非常相似:
方法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"
中将"pagination": "no"
更改为.jhipster/Payment.json
并重新运行生成器。这将重新生成服务,资源和存储库而不进行分页。
方法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
参数。