我想进行一个复杂的查询并将结果映射到DTO中。 DTO如下:

@Value(staticConstructor = "of")
public class TotalsDto {
    LocalDate date;
    long totals;
    long totalPerCategory;
    int categoryId;
    String categoryName;
}

我的存储库接口从JpaRepository扩展。这将引发IllegalArgumentException: Not a managed type,因为TotalsDto本身不是实体。

存储库为:
@Repository
public interface TotalsRepository extends JpaRepository<TotalsDto, Integer> {

    @Query(value = "SELECT ...", nativeQuery = true)
    List<TotalsDto> getTotals(params...);
}

该查询正在从其他实体获取数据以构建DTO。
有什么办法将每列映射到DTO?我尝试将其与下面的查询映射,但仍获取Not a managed class
SELECT my.package.TotalsDto.of(column1, subqueryResult1, subqueryResult2...)

最佳答案

1)使TotalsDto为界面

2)创建吸气剂:

public interface TotalsDto{

    long getTotals();
    int getCategoryId();
    ...

}

然后,Spring Data Jpa将自动创建/填充您的结果对象。

有关此主题的更多信息here

10-04 15:59