SORU
21 ŞUBAT 2011, PAZARTESİ


Büyük sonuç kümeleri üzerinden yineleme için uygun desen nedir?JPA:

Hadi milyonlarca satır ile bir tablo var. JPA kullanarak, ne bu masa, bu tür karşı bir sorgu üzerinde yineleme için en uygun yolu budur-Hafıza Listesi her bir şeyim yokmilyonlarca nesne ile mi?

Örneğin, aşağıdaki tablo büyük darbe olacağını düşünüyorum:

List<Model> models = entityManager().createQuery("from Model m", Model.class).getResultList();

for (Model model : models)
{
     System.out.println(model.getId());
}

Sayfa (elle 4*/setMaxResult()*güncelleme döngü) gerçekten en iyi Çözüm mü?

Edit: hedef olduğumu kullanmak durumunda birincil toplu iş türüdür. Eğer iyi çalıştırmak için uzun zaman alır. Hayır web istemcisi dahil; sadece "" her satır için, bir (ya da bazı küçük N) bir zamanda. bir şey yapmaya gerek yoktur Onları aynı anda bellekteki tüm zorunda kalmamak için çalışıyorum.

CEVAP
21 ŞUBAT 2011, PAZARTESİ


Java Persistence with Hibernate sayfa 537 çözüm ScrollableResults kullanarak verir ama ne yazık ki sadece Uyku için.

setFirstResult/setMaxResults ve manuel yineleme kullanarak gerçekten gerekli gibi görünüyor. İşte benim çözüm JPA kullanarak:

private List<Model> getAllModelsIterable(int offset, int max)
{
    return entityManager.createQuery("from Model m", Model.class).setFirstResult(offset).setMaxResults(max).getResultList();
}

daha sonra, aşağıdaki gibi kullanabilirsiniz:

private void iterateAll()
{
    int offset = 0;

    List<Model> models;
    while ((models = Model.getAllModelsIterable(offset, 100)).size() > 0)
    {
        entityManager.getTransaction().begin();
        for (Model model : models)
        {
            log.info("do something with model: "   model.getId());
        }

        entityManager.flush();
        entityManager.clear();
        em.getTransaction().commit();
        offset  = models.size();
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009