2016-04-25 65 views
0

我的問題是,我得到的結果只有一行,這也是三次。我想檢索庫存少於10的所有數據。如何將對象數據添加到數組列表?休眠:存儲從查詢檢索到ArrayList的所有值

 String lowStock = "SELECT MedcineID, MName, Quantity FROM medcineinventory WHERE Quantity < :stock"; 
     SQLQuery query = session.createSQLQuery(lowStock); 

     query.setParameter("stock", 10); 
     List<Object[]> stocks = query.list(); 
     ArrayList<Inventory> allResults = new ArrayList<Inventory>(); 
      Inventory iv = new Inventory(); 

      for(Object[] data : stocks){ 

       iv.setMedcineID((Integer) data[0]); 
       iv.setMName((String) data[1]); 
       iv.setQuantity((Integer)data[2]); 

       allResults.add(iv); 

      }  

     tx.commit(); 
     session.close(); 

    return allResults; 

回答

2

你必須將你的Inventory iv = new Inventory();循環內更換您的for循環:

for(Object[] data : stocks){ 
    Inventory iv = new Inventory(); 
    iv.setMedcineID((Integer) data[0]); 
    iv.setMName((String) data[1]); 
    iv.setQuantity((Integer)data[2]); 
    allResults.add(iv); 
} 

這是因爲每次你都要經過結果列表中時,你改變初始iv的數據,並添加新進入結果列表。所以最後你在最後的列表中有三個條目,它們具有相同的值,這些值表示檢索到的數據的最後一個元素。

在循環內移動創建iv會每次創建新元素。

+0

謝謝GHajba:D – Baadshah

2
   for(Object[] data : stocks){ 
       Inventory iv = new Inventory(); 
       iv.setMedcineID((Integer) data[0]); 
       iv.setMName((String) data[1]); 
       iv.setQuantity((Integer)data[2]); 

       allResults.add(iv); 

       } 

創建for循環內的一個新的庫存對象,並添加到您的數組列表。與此

+0

謝謝Priyamal – Baadshah

+0

@Baadshah不客氣! – Priyamal