首页 > 解决方案 > 带有聚合 DTO 的 Spring JPA“PersistentEntity 不能为空”

问题描述

我的摘要 DTO 正在抛出 PersistentEntity 不能为空!我正在使用摘要 DTO 来返回 sum() 和 count() 聚合。我向源存储库界面添加了自定义查询。

public interface SettlementHistoryRepository extends JpaRepository<SettlementHistory, String> {

  @Query("SELECT new com.x.service.report.dto.CategoryAmountSummary(h.organizationName, count(h.id), sum(h.rebateAmount)) FROM SettlementHistory h WHERE h.fundDate BETWEEN :rangeStart AND :rangeEnd GROUP BY h.organizationName ORDER BY h.organizationName")
  List<CategoryAmountSummary> summarizeRebateAmountByOrganizationWhereFundDateIsBetweenOrderByFundDate(
        @Param("rangeStart") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm'Z'") Date rangeStart,
        @Param("rangeEnd") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm'Z'") Date rangeEnd
  );

该方法导致此错误:

  ERROR --- [nio-8080-exec-7] o.s.d.r.w.RepositoryRestExceptionHandler : PersistentEntity must not be null!

如果不是因为我需要对每个类别进行计数,我会返回实体类。我还能怎么做呢?

标签: spring-data-jpaspring-data-rest

解决方案


最后,Spring Data Rest 不喜欢存储库返回不同的对象类型。为了解决这个问题,我添加了一个 Rest Controller,它依次调用存储库上的聚合方法。它能够毫无问题地返回摘要 DTO。


推荐阅读