2016-04-12 20 views
0

Bu kod nasıl optimize edilir, şimdi döngüden yalnızca son sonuç aldım. toAdd - ürün kimliğine sahip dizi. zamanda bunu infaz konumJpa birçok parametreyle nasıl sorgu döndürülebilir

Query query = null; 

     for (long l : toAdd) { 
      query = entityManager.createQuery("select p from Products p where p.id =:idProd", Products.class); 
      query.setParameter("idProd", l); 

     } 
     return (List<Products>) query.getResultList(); 
+0

Ben döngüsünden önce bir koleksiyon oluşturmak için düşünmek ve buna sorgunun sonucunu ekleyerek her tekrarda, ama düşünüyorum koltuk değneği olmadan bunu yapmak için doğru bir yol var – Ost

cevap

0

Sadece bir kez sorgu yürütülmesi ve konum, onun parametrenin değeri olsa ilmek bir kez bunu gerçekleştirmenin beri, senin dizinin son öğedir tüm dizi.

o

List<Product> allProducts = new ArrayList<>(); 
for (long l : toAdd) { 
    query = entityManager.createQuery("select p from Products p where p.id =:idProd", Products.class); 
    query.setParameter("idProd", l); 
    allProducts.addAll(query.getResultList()); 
} 
return allProducts; 

olmalıdır kodunu düzeltmek için Ama bu çok verimsiz: yerine tek sorgu yürütme, bir sorguyu yürütür ve böylece listedeki her kimlik için veritabanına bir gidiş dönüş yapar tüm ürünleri bir defada iade etmek. Sadece daha iyi bir sorgu kullanmaz Neden:

query = entityManager.createQuery("select p from Products p where p.id in :productIds", Products.class); 
query.setParameter("productIds", toAdd); 
return query.getResultList(); 
0

Sen IN maddesini kullanmayı deneyebilirsiniz.

query = null; 
query = entityManager.createQuery("select p from Products p where p.id IN :idProds", Products.class); 
query.setParameter("idProds", toAdd); 
return (List<Products>) query.getResultList(); 
0
Query query = null; 

      query = entityManager.createQuery("select p from Products p where p.id IN(:idProd)", Products.class); 
      query.setParameter("idProd", toAdd.toString()); 

     return (List<Products>) query.getResultList(); 
toAdd.toString() koma ayrılmış bir dize oluştursun

(örn "12,24,45,16")

İlgili konular