我有一个resultList,它从一个查询多个表的JPQL查询中获取结果:
Query query = em.createQuery("SELECT protein.gid,protein.uniProtAccession,protein.name,protein.ECNumber,ttdtarget.uniProtID,ttdtarget.gid FROM Protein protein,TtdTarget ttdtarget WHERE protein.uniProtAccession = ttdtarget.uniProtID");
List resultList = query.getResultList();
注意:我现在正在将结果集的大小限制为5,仅用于调试。我想从resultList获取每个对象内返回的值,它基本上是一个对象数组。
到目前为止,我已尝试迭代到对象,但无法访问内部值。
for (int i = 0; i < resultList.size(); i++)
{
System.out.println("->"+resultList.get(i));
}
输出:
->[Ljava.lang.Object;@141ab9e
->[Ljava.lang.Object;@6a15ca
->[Ljava.lang.Object;@bcb654
->[Ljava.lang.Object;@1664b54
->[Ljava.lang.Object;@db953c
这是调试的变量输出:
所以我的问题是如何在对象中访问这些值。
答案 0 :(得分:3)
你没有对象列表,它是一个Objectarrys列表
List<Object[]> resultList = (List<Object[])resultList;
for (int i = 0; i < resultList.size(); i++)
{
System.out.print("protein.gid ->"+resultList.get(i)[0]);
System.out.println("protein.uniProtAccession ->"+resultList.get(i)[1]);
}
答案 1 :(得分:2)
结果是List<Object[]>
,所以投了那个。所以一个列表,其中每个元素都是一个值数组。然后,您必须将每个值转换为其类型(您事先知道)。
如果您只想迭代并打印:
List<Object[]> resultList = (List<Object[]>) query.getResultList();
for (Object[] array : resultList) {
for (Object field : array) {
System.out.println("->"+field);
}
}
或者,您可以创建一个具有这些确切字段的新类,使其构造函数接受所有值,并在查询中使用它:SELECT new Foo(.....) FROM..
。在那里,您可以使用返回em.createQuery(..)
TypedQuery
的通用替代方法
答案 2 :(得分:2)
List<Object[]> resultList = query.getResultList();
for (Object[] objects : resultList)
{
for (Object object : objects)
{
System.out.println(object)
}
}
答案 3 :(得分:1)
查询的结果是对象数组。
List resultList = query.getResultList();
for(Object result : resultList) {
Object[] results = (Object[]) result;
for(Object res : results) {
System.out.println(res);
}
}
或者您可以使用Bozho解决方案并从查询中创建新的直接。
答案 4 :(得分:0)
您可以使用所需的确切字段创建一个新类,并使用TypedQuery
TypedQuery<CustomClass> query = em.createQuery("" /* Query String */, CustomClass.class);
List<CustomClass> resultList = query.getResultList();
foreach (CustomClass result : resultList){
// Need to override method toString() in CustomClass
System.out.println("->" + result);
}
答案 5 :(得分:-1)
我很想建议嵌套for循环:
for (int i = 0; i < resultList.size(); i++)
{
for(int j = 0; j < resutList.get(i).size(); j++){
System.out.println("->"+resultList.get(i).get(j));
}
}