java - JPA native 查询连接返回对象但取消引用引发类强制转换异常

标签 java sql jpa jpql

我正在使用 JPQL Native 查询来连接表,查询结果存储在 List<Object[]> 中.

public String getJoinJpqlNativeQuery() {



            String final SQL_JOIN = 
               "SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username, 
                t1.anotherNum FROM MasatosanTest t1 
                JOIN MasatoView v1 ON v1.username = t1.username;"

            System.out.println("get join jpql native query is being called 
        ============================");

            EntityManager em = null;
            List<Object[]> out = null;
            try {
                em = EmProvider.getDefaultManager();
                Query query = em.createNativeQuery(SQL_JOIN);
                out = query.getResultList();

                System.out.println("return object ==========>" + out);

                System.out.println(out.get(0));

                String one = out.get(0).toString(); //LINE 77 where ClassCastException
                System.out.println(one);
            }
            catch(Exception e) {
            }
            finally {
                if(em != null) { em.close; }
            }
}

问题是

System.out.println("return object ==========>" + out);输出:

return object ==========>
[[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020], 
[false, 0, 2010-12-21 15:32:53.0, koga, 0.213]]

System.out.println(out.get(0))输出:

[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020]

所以我假设我可以分配 out.get(0) 的返回值,它应该是 String:

String one = out.get(0).toString();

但是我得到了奇怪的 ClassCastException。

java.lang.ClassCastException: java.util.Vector cannot be cast to 
[Ljava.lang.Object;
        at local.test.jaxrs.MasatosanTestResource.getJoinJpqlNativeQuery
(MasatosanTestResource.java:77)

那么到底是怎么回事呢?连Object[] foo = out.get(0);会抛出 ClassCastException :(

最佳答案

SELECT 子句查询多个列或实体,结果聚合在 getResultList( ) 返回的 java.util.List 中的一个对象数组 (Object[]) 中。

 //---

    Query query = manager.createQuery("SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username, t1.anotherNum FROM MasatosanTest t1 JOIN MasatoView v1 ON v1.username = t1.username;");

    List results = query.getResultList( ); // Fetches list containing arrays of object
    Iterator it = results.iterator( );

    while (it.hasNext( )) {

       Object[] result = (Object[])it.next(); // Iterating through array object 

       Boolean first = (Boolean) result[0]; // Fetching the field from array

       /* Likewise for all the fields, casting accordingly to the sequence in SELECT query*/

    }

    //---

编辑: 为避免显式转换,您可以使用构造函数表达式,使用适当的参数向实体添加构造函数。

SELECT new org.somepackage.XEntity(x.a, x.b) FROM XEntity x

关于java - JPA native 查询连接返回对象但取消引用引发类强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536655/

相关文章:

mysql - SQL,查找满足严格条件的订单,匹配项目,如果购买了其他项目则不匹配

java - JPA:无状态 session Bean 和托管实体

java - Spring Boot 无法解析 Linux 上的占位符,但在 Eclipse 上工作正常

php - MySQL:查询搜索所有可能的单词

java - Libgdx 无法正确批处理计时器

具有单列和增量 id 的 SQL 表

mysql - EclipseLink JPA 辅助服务器

java - Spring data with JPA (mySQL) - 动态更改数据源

java - Gson 预期为 BEGIN_ARRAY 但在第 1 行第 62 列为 STRING

java - 我如何判断文件(从保管箱网页读取)是否已在Java中被更改?