2011-08-20 61 views
0

從我的數據庫中檢索數據的問題我試圖從我的數據庫(使用JPA)檢索給定項目列表的名稱,其ID爲 我的函數由我的addFunction調用,只返回最後一個ID項目,並忽略其餘的!從我的數據庫使用JPA

public ArrayList<Integer> getListidItemByItemName() 
    { 
     try{ 
     EntityTransaction entityTrans=emm.getTransaction(); 
     entityTrans.begin(); 
      for (String val : listItem) 
      { 
      System.out.println("my values"+val); 
      javax.persistence.Query multipleSelect= em.createQuery("SELECT i.ItemId FROM Item i WHERE i.ItemName IN (:w)"); 
      multipleSelect.setParameter("w", val); 
      List ItemId = new LinkedList(); 
      ItemId= multipleSelect.getResultList(); 
      listIdItem = new ArrayList(ItemId); 
      }  
      entityTrans.commit(); 
      System.out.println("Id for given item name"+listIdItem); 
      return listIdItem; 
     } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

結果:

INFO: my valuesResponse Time 
INFO: my valuesAssigned Group Response Time 
INFO: Id for given item name[7] //the id of the last item in the list 

     return listIdItem; 
    } 

問題出在哪裏?

更新: 我用墊的解決方案,它工作得很好

謝謝

回答

1
listIdItem = new ArrayList(ItemId); 

這條線替換你listIdItem有任何一個新的列表。如果你想添加到列表listIdItem,做這樣的事情:

listIdItem.addAll(ItemId); 
+0

,我試過了你的建議,並且存在相同的問題 – rym

+0

在循環內移動打印以查看你是否確實獲得了多個id(在每次迭代時打印ItemId列表)。 – Mat

+0

@ Mat,是的,當我在循環內打印項目時,我知道該函數可以正常工作,但在其他函數中的問題將這些項添加到數據庫中! – rym

0

你是一個新的ArrayList覆蓋在循環的每次迭代您的變量listIdItem。所以最後listIdItem將只包含最後一次迭代的值。