不兼容的类型列表和页面
Incompatible types List and Page
我正在使用 JHipster 开发一个 Web 应用程序来管理付款,并希望过滤用户可以看到的付款,以便他只能看到他的付款。为此,我在 Youtube 上关注了 Matt Raible 的 blog tutorial。他使用由 JHipster 生成的 findByUserIsCurrentUser()。
List<Blog> blogs = blogRepository.findByUserIsCurrentUser();
当我在我的项目中进行相同的更改时,我发现我必须 return 的类型是一个页面,我得到了一个不兼容的类型错误,这是我的方法:
public Page<Payment> findAll(Pageable pageable) {
log.debug("Request to get all Payments");
Page<Payment> result = paymentRepository.findByUserIsCurrentUser();
return result;
}
如果我更改在 PaymentRepository 中声明的 findByUserIsCurrentUser() 的 findAll(pageable),如下所示
public interface PaymentRepository extends JpaRepository<Payment,Long> {
@Query("select payment from Payment payment where payment.user.login = ?#{principal.username}")
List<Payment> findByUserIsCurrentUser();
}
我收到以下错误:
我该如何解决这个问题?
您可以通过两种方式解决此问题。这是假设您正在使用一项服务,如果不是,它仍然非常相似:
方法 1: 如果您希望您的服务 return 当前用户的所有付款,那么您需要修改您的服务,可能还需要修改您的资源来处理列表而不是页面:
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;
}
或者,您可以在 .jhipster/Payment.json
中将 "pagination": "pagination"
更改为 "pagination": "no"
并重新运行生成器。这将在没有分页的情况下重新生成服务、资源和存储库。
方法2:如果你想让你的服务分页,你需要改变你的存储库方法来接受Pageable
对象,并且return一页:
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;
}
这将 return 结果的一个子集,基于 pageable
对象包含的任何内容。这包括大小、页码、偏移量和排序。例如,大小为 20 和页码为 0 将 return 前 20 个结果。将页码更改为 1 将 return 接下来的 20 个结果。这些参数通常从前端传递给你的 API - 你会注意到 PaymentResource
中的 getAllPayments()
有一个 Pageable
参数。
我正在使用 JHipster 开发一个 Web 应用程序来管理付款,并希望过滤用户可以看到的付款,以便他只能看到他的付款。为此,我在 Youtube 上关注了 Matt Raible 的 blog tutorial。他使用由 JHipster 生成的 findByUserIsCurrentUser()。
List<Blog> blogs = blogRepository.findByUserIsCurrentUser();
当我在我的项目中进行相同的更改时,我发现我必须 return 的类型是一个页面,我得到了一个不兼容的类型错误,这是我的方法:
public Page<Payment> findAll(Pageable pageable) {
log.debug("Request to get all Payments");
Page<Payment> result = paymentRepository.findByUserIsCurrentUser();
return result;
}
如果我更改在 PaymentRepository 中声明的 findByUserIsCurrentUser() 的 findAll(pageable),如下所示
public interface PaymentRepository extends JpaRepository<Payment,Long> {
@Query("select payment from Payment payment where payment.user.login = ?#{principal.username}")
List<Payment> findByUserIsCurrentUser();
}
我收到以下错误:
我该如何解决这个问题?
您可以通过两种方式解决此问题。这是假设您正在使用一项服务,如果不是,它仍然非常相似:
方法 1: 如果您希望您的服务 return 当前用户的所有付款,那么您需要修改您的服务,可能还需要修改您的资源来处理列表而不是页面:
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;
}
或者,您可以在 .jhipster/Payment.json
中将 "pagination": "pagination"
更改为 "pagination": "no"
并重新运行生成器。这将在没有分页的情况下重新生成服务、资源和存储库。
方法2:如果你想让你的服务分页,你需要改变你的存储库方法来接受Pageable
对象,并且return一页:
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;
}
这将 return 结果的一个子集,基于 pageable
对象包含的任何内容。这包括大小、页码、偏移量和排序。例如,大小为 20 和页码为 0 将 return 前 20 个结果。将页码更改为 1 将 return 接下来的 20 个结果。这些参数通常从前端传递给你的 API - 你会注意到 PaymentResource
中的 getAllPayments()
有一个 Pageable
参数。