0

假设我有一个test带有列的表idname

在我的 bean 上,我收到了这个查询

public List getTestList(){
  Query q = em.createNativeQuery("select * from test");
  List list = q.getResultList();
  return list;
}

在我的 jsf 页面上,我有:

<ul>
    <ui:repeat id="resulta" value="#{testController.testList}" var="item"> 
        <li>#{item.id}</li>
    </ui:repeat>
</ul>

为什么我得到一个SEVERE: javax.el.ELException: /test.xhtml: For input string: "id"

4

2 回答 2

0

为什么我得到一个严重的:javax.el.E​​LException:/test.xhtml:对于输入字符串:“id”

因为本机查询返回 a List<Object[]>,而不是 a List<Test>。您基本上是在尝试Object[]使用诸如"id"index 之类的字符串而不是诸如0. 如果您仔细观察堆栈跟踪,那么您应该已经注意到ArrayELResolver异常之后堆栈中存在更远的地方,这应该已经暗示#{item}实际上被解释为一个数组。

所以,如果你绝对不能将它作为一个完全值得的List<Test>你可以很容易地使用@ManyToOneSELECT进行内部连接),那么应该这样做以从查询中获取第一列:

<li>#{item[0]}</li>
于 2013-05-03T11:05:55.547 回答
0

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

首先,您的情况不需要本机查询。本机查询的结果返回一个对象数组列表。您必须创建 JPQL 查询而不是本机查询。

Query q = em.createQuery("select t from Test t", Test.class);
List<Test> list = q.getResultList();
于 2013-05-03T05:59:17.297 回答