我正在使用 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/