【问题标题】:[Ljava.lang.Object; cannot be cast to entityClass[Ljava.lang.Object;不能转换为 entityClass
【发布时间】: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;

双*中的行是每个循环都会弹出错误的行。请提出建议

Image contains the resultset which is a list of entity class object but i am not able to type cast to enitity Class itself

从数据库中检索数据时,我返回的是实体类列表,而不是实体类列表,我得到的是 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&lt;Dashboard&gt;。它返回一个List&lt;Object[]&gt;。在您的调试器中,您可以部署 elementData[0] 来检查每个 Object[] 中的确切内容。因此,之前的评论是正确的,您现在应该明白链接问题的答案了。
  • 不,您没有使用 JPA API。您正在使用“Spring Data JPA”。作为选择使用该技术的人,您应该了解其中的区别
  • 我已经尝试过其他类似链接中提供的解决方案,即使这些解决方案抛出完全相同的解决方案

标签: java spring spring-data-jpa


【解决方案1】:

list() 方法返回List,你不能像以前那样直接投射它们。

List<Dashboard> dashboard = (List<Dashboard>)dashboardRepository.findAll();

您必须存储在List&lt;Object[]&gt; 中并逐一迭代List&lt;Object[]&gt; 然后转换为List&lt;Dashboard&gt;

List<Object[]> list= (List<Object[]>)dashboardRepository.findAll();
List<Dashboard> mylist=new ArrayList<>();

            if(list!=null){
            for(Object [] ob:list){
                member1=ob[0];
                member2=ob[1];
                .......
                Dashboard db=new Dashboard(menber1,member2...);//or you use setter method for class member initialize.
                mylist.add(db);
            }
        }

【讨论】:

  • 第一行本身.. 它说不能将仪表板打字到对象列表
猜你喜欢
  • 2013-12-27
  • 2019-04-26
  • 2012-05-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2014-05-09
相关资源
最近更新 更多