簡體   English   中英

將查詢結果映射到DTO的最佳方法

[英]Best way to map query result to DTO

我想進行一個復雜的查詢並將結果映射到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將自動創建/填充您的結果對象。

有關此主題的更多信息

Repository (或JpaRepository )的第一個類型參數必須是托管實體。 因此,由於TotalsDto不是托管實體JpaRepository<TotalsDto, Integer>因此JpaRepository<TotalsDto, Integer>無效。 TotalsDto更改為@MaciejKowalski建議的投影接口,然后將JPA實體作為第一個類型參數傳遞給Repository ,例如Repository<Order, Integer>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM