简单的问题,但我没有看到我的推理错误。有一个命名查询,其中选定的成员而不是整个行/实体作为结果。
现在我想使用方便的元组方法访问成员字段。
q = em.createNamedQuery("test.findvar");
List<Tuple> tuples = q.getResultList();
for (Tuple t : tuples)
System.out.println(t.get(0) + " " + t.get(1));
Run Code Online (Sandbox Code Playgroud)
不幸的是它让我困惑:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to javax.persistence.Tuple
Run Code Online (Sandbox Code Playgroud)
一切正常:
q = em.createNamedQuery("test.findvar");
List<Object[]> objs = q.getResultList();
for (Object[] obj : objs)
System.out.println(obj[0] + " " + obj[1]);
Run Code Online (Sandbox Code Playgroud)
我的第一个解决方案有什么问题?
您可以在 createNamedQuery() 中指定返回类型,如javadoc中所述
所以你的代码应该是这样的:
q = em.createNamedQuery("test.findvar", Tuple.class);
List<Tuple> tuples = q.getResultList();
for (Tuple t : tuples)
System.out.println(t.get(0) + " " + t.get(1));
Run Code Online (Sandbox Code Playgroud)
当您指定返回类型时,将创建TypedQuery实例,而不是Query实例。查询不使用泛型,仅返回 java.util.List。
| 归档时间: |
|
| 查看次数: |
10229 次 |
| 最近记录: |