【问题标题】:Problems iterating results from a SQL JPA Native Query从 SQL JPA 本机查询迭代结果时出现问题
【发布时间】:2014-09-02 18:04:24
【问题描述】:

我正在迭代从本机 SQL 查询获得的对象,以便能够打印一个实体的属性。对于这个建议,我使用以下代码:

public<T> ArrayList exectuteStoreProcedure(String sqlQuery){
    setEntities();
    int colcount = 0;
    int rowcount = 0;
    int rowcounter = 0;

    ArrayList a = new ArrayList();
    try{

        Query query = em.createNativeQuery(sqlQuery);
        rowcount = query.getResultList().size();
        colcount = ((Class[]) query.getResultList().get(0)).length;  

        String [][] array = new String [rowcount][colcount];

        for (Iterator<String[]> rs = query.getResultList().iterator(); rs.hasNext();) {
            String[] obj = rs.next();
            String[] record = new String[colcount];
            System.arraycopy(obj, 0, record, 0, colcount);
            array[ rowcounter++] = (String[]) record;
        }


        a.add(array);

        }catch(Exception ex){
         et.rollback();
     }
    closeEntities();

    return a;

}

执行失败,抛出以下异常:

java.lang.ClassCastException: [Ljava.lang.Object;无法转换为 [Ljava.lang.Class;

在调试模式下运行程序后,我发现问题在于该命令行上的 (Class[]) 声明:

colcount = ((Class[]) query.getResultList().get(0)).length;  

我想知道如何获得列长。有谁知道怎么做?我的实体是Idioma,它由String palabra、String idioma和int wordID组成;

提前致谢!

【问题讨论】:

    标签: java sql jpa


    【解决方案1】:

    错误说明了一切,那不是 Class 的数组,而是 Object 的数组。你可以改变你的演员和使用:

    colcount = ((Object[]) query.getResultList().get(0)).length;  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多