2014-03-26 52 views
1

比如我有一個表作爲學生它包含類似ID年齡列 我用NativeQuery像下面回覆特定的列值。如何使用JPA從表中獲取多列?

Query query = entityManager.createNativeQuery("SELECT age FROM Student"); 
List list=query.getResultList(); 

通過使用上面的查詢,我們會得到學生表老化的名單 現在我想年齡從表

Query query = entityManager.createNativeQuery("SELECT age,name FROM Student"); 
List list=query.getResultList(); 

如果我做這樣我的代碼執行良好,但在另一個list.So在一個列表和年齡如何,我得到的名字,我怎麼能做到這一點。非常感謝您

注意 我沒有在我的項目從數據庫使用原生查詢任何實體類或POJO類我收到表。

+0

它引發了什麼異常。它應該工作並返回一個對象列表[] – andy

+0

@andy我很抱歉它正在執行,但我怎麼能在另一個列表中獲得另一個列表和名稱的年齡。謝謝 – Prabha

+2

使用強制轉換,類似於(Ojbect o:list){Object [] values =(Object [])o; int age =(int)values [0]; String name =(String)values [1];} – andy

回答

1

我相信這個問題已經回答了here

但是,我強烈建議創建標準實體,稱爲學生列名稱和年齡。這種方法將更容易實施並在將來進行維護。

+0

謝謝,在這裏我沒有POJO類 – Prabha

+0

我想最簡單的方法就是創建它們。但是,如果你不想這樣做 - 你可能會考慮使用標準的java.sql.Connection實例嗎?這樣你就可以自己管理查詢和結果。 100%控制。 – altanis

2

您可以通過兩種方式來處理它。

  1. 將結果集中的值解析到單獨的列表中。既然你沒有爲它定義的實體,查詢將返回一個

    List<Object[]> list = query.getResultList(); 
    

    對於返回的每一行,您可以通過在它們出現的索引來訪問的年齡和名字。即年齡在第一次選擇在上面的例子中,這樣你就這將是指數0,名稱爲索引1

    for (Object[] obj : list) { 
        age = obj[0]; 
        name = obj[1]; 
        // ..put them into whatever collection you desire 
    } 
    
  2. 使用兩個查詢。一個選擇AGE,另一個選擇NAME。每個人都會將相應的值返回給自己的列表。

    Query query = entityManager.createNativeQuery("SELECT age FROM Student"); 
    List ages=query.getResultList(); 
    
    query = entityManager.createNativeQuery("SELECT name FROM Student"); 
    List names=query.getResultList(); 
    

    只有告誡這種方法是兩個列表之間沒有真正的關係。換句話說,年齡[3]在邏輯上可能不符合名字[3]。但是......事實上,原來的問題沒有定義如何創建兩個列表。

+0

我以第二種方式完成。我不知道第一種方式,現在很好,謝謝 – Prabha