[英]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.