【发布时间】:2017-10-09 09:48:26
【问题描述】:
当我尝试将实体转换为 DTO 时,我正在使用 JPA 查询获取值并将结果放入列表但在服务类中。我收到错误“Ljava.lang.Object;无法转换为 entityClass” ...我尝试过 forloop、forEach 循环和迭代器出错。当我尝试获取第一个元素并将其放入 entityclass 对象时,我得到了这个错误。
List<Dashboard> dashboard = (List<Dashboard>)dashboardRepository.findAll();
System.out.println("AllSolCount Length :------------------------------- "+dashboard.size());
List<DashboardDto> result = new ArrayList<DashboardDto>();
System.out.println("List Elements :----------------------------------- "+dashboard);
/*for(int i=0;i<dashboard.size();i++) {
**Dashboard obj = (Dashboard)dashboard.get(i); //error in this line I get**
DashboardDto dashboardDto = mapToDto(obj, DashboardDto.class, false);
result.add((DashboardDto) dashboardDto);
}
for (Dashboard obj : dashboard){
**DashboardDto dashboardDto = mapToDto(obj, DashboardDto.class, false);// error in this line I get**
result.add((DashboardDto) dashboardDto);
}*/
Iterator itr = dashboard.iterator();
while(itr.hasNext()){
**Dashboard obj = (Dashboard) itr.next(); // error here itself**
}
return result;
双*中的行是每个循环都会弹出错误的行。请提出建议
从数据库中检索数据时,我返回的是实体类列表,而不是实体类列表,我得到的是 java 对象的列表。所以我认为可能是某些配置或缺少某些东西..
对我来说它是一个自定义查询 @Query(value = "SELECT sol.offering, sol.state ,COUNT(sol.id) FROM Solution sol GROUP BY sol.offering,sol.state") 公共列表 findAll();
【问题讨论】:
-
关于 SO 有许多非常相似的问题,都指向相同的原因(如 stackoverflow.com/questions/27280818/… )你看过那些吗?
-
答案就在你的截图中。您的存储库不返回
List<Dashboard>。它返回一个List<Object[]>。在您的调试器中,您可以部署elementData[0]来检查每个Object[]中的确切内容。因此,之前的评论是正确的,您现在应该明白链接问题的答案了。 -
不,您没有使用 JPA API。您正在使用“Spring Data JPA”。作为选择使用该技术的人,您应该了解其中的区别
-
我已经尝试过其他类似链接中提供的解决方案,即使这些解决方案抛出完全相同的解决方案
标签: java spring spring-data-jpa