Я хочу сопоставить результаты с объектами передачи данных, но я не знаю, как правильно решить эту проблему.
Поскольку имеется множество строк результатов, я не думаю, что это хорошее решение, если я проанализирую возвращаемые объекты для каждого из них и назначу их текущему созданному объекту передачи данных.
public class MaintenanceTaskRepositoryImpl implements CustomMaintenanceTaskRepository {
@Autowired
EntityManager em;
@Override
public List<Object []> findRepairCostForLast5Year() {
List<Object []> results = em.createNativeQuery(
"SELECT YEAR(END_DATE) AS YEAR," +
" SUM(PRICE) AS REPAIR_COST" +
" FROM MAINTENANCE_TASK" +
" WHERE TYPE_OF_WORK = 'PREVENTIVE' AND" +
" DATEDIFF(YEAR, END_DATE , CURRENT_DATE) < 6" +
" GROUP BY YEAR(END_DATE) " +
" LIMIT 5").getResultList();
return results;
}}
Выше запрос возвращает несколько строк, поэтому это список массивов объектов.
Это работает прямо сейчас, но я хочу, чтобы мой метод напрямую возвращал список DTO.
Мой класс DTO ниже.
public class RepairCostDto {
private int year;
private BigDecimal cost;
public RepairCostDto(int year, BigDecimal cost) {
this.year = year;
this.cost = cost;
}
public RepairCostDto() {
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public BigDecimal getCost() {
return cost;
}
public void setCost(BigDecimal cost) {
this.cost = cost;
}}
Заранее спасибо.
Edit:
выше возврата, как,
[[year,cost],[year1,cost1],[year2,cost2]]
но я хочу это, как показано ниже,
[RepairCostObj,RepairCostObj1, RepairCostObj2...]
Edit2:
Ссылаясь на этот и на этот ответ я должен применить решение, которое я упомянул выше?