2013-05-03 29 views
0

可以說,我有我的豆表testid列和name訪問使用UI本地查詢列表:重複

我得到這個查詢

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"

回答

0

爲什麼我得到一個重度:javax.el.E​​LException:/test.xhtml:對於輸入字符串: 「ID」

由於本機查詢返回List<Object[]>,不是List<Test>。你基本上試圖訪問Object[]陣列使用一個字符串,如"id"作爲索引,而不是像0整數。如果你仔細觀察堆棧軌跡,那麼在例外之後,你應該已經注意到ArrayELResolver在棧中的存在,這應該已經暗示#{item}實際上被解釋爲一個數組。

所以,如果你絕對無法獲得它作爲一個fullworthy List<Test>you can easily do inner joins using @ManyToOne and so on),那麼這應該做的,以獲得從SELECT查詢的第一列:

<li>#{item[0]}</li> 
0

SELECT子句查詢多個列或實體,結果 聚合在由getResultList()返回的java.util.List 中的對象數組(Object [])中。

首先,您的情況不需要原生查詢。本地查詢的結果返回對象數組的列表。您必須創建JPQL查詢而不是本地查詢。

Query q = em.createQuery("select t from Test t", Test.class); 
List<Test> list = q.getResultList(); 
+0

嗨,其實我需要它nativeQuery,因爲我需要類似''select t。*,nt.name from test'作爲t Inner加入newTest as nt「' – galao 2013-05-03 06:02:01

+2

@galao試着描述你的實際問題,它誤導人們,浪費時間在兩邊。類似的,可以參考這裏 - http://stackoverflow.com/a/4536802/366964 – 2013-05-03 06:09:20