2016-04-25 4 views
0

Mein Problem ist, dass ich die Ergebnisse von nur einer Zeile, das heißt auch dreimal erhalten. Ich möchte alle Daten abrufen, die weniger als 10 Bestand haben. Wie füge ich die Objektdaten zur Arraylist hinzu?Hibernate: Speichern aller Werte von Abfrage an 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; 

Antwort

2

Sie müssen Ihre Inventory iv = new Inventory(); innerhalb der Schleife bewegen:

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); 
} 

Das ist, weil jedes Mal, wenn die Liste durchgehen Ergebnisse Sie die Daten des ursprünglichen iv ändern und fügen Sie eine neue Eintrag in die Ergebnisliste. So haben Sie am Ende drei Einträge in Ihrer endgültigen Liste mit den gleichen Werten, die das letzte Element der abgerufenen Daten darstellen.

Wenn Sie die Erstellung von iv innerhalb der Schleife verschieben, werden jedes Mal neue Elemente erstellt.

+0

Danke 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); 

       } 

Erstellen Sie ein neues Inventar Objekt innerhalb der for-Schleife und fügen hinzu, dass auf Ihre Arraylist. Ersetzen Sie Ihre for-Schleife mit diesem

+0

Danke Priyamal – Baadshah

+0

@Baadshah sind herzlich willkommen! – Priyamal