将查询结果映射到 DTO 的最佳方式

Leo*_*rdo 4 java spring jpa spring-data spring-data-jpa

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

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

我的存储库界面是从JpaRepository. 这是抛出一个IllegalArgumentException: Not a managed type,因为TotalsDto它本身不是实体。

存储库是:

@Repository
public interface TotalsRepository extends JpaRepository<TotalsDto, Integer> { 

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

查询正在从其他实体获取数据以构建 DTO。有什么方法可以将每一列映射到 DTO?我试图用下面的查询映射它,但它仍然得到Not a managed class.

SELECT my.package.TotalsDto.of(column1, subqueryResult1, subqueryResult2...)
Run Code Online (Sandbox Code Playgroud)

Mac*_*ski 5

1)制作TotalsDto界面

2)创建吸气剂:

public interface TotalsDto{

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

}
Run Code Online (Sandbox Code Playgroud)

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

更多关于这里的主题