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

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • BradleyWuzHere

    BradleyWuzHe

    25 NİSAN 2011
  • EmperorTigerstar

    EmperorTiger

    14 EYLÜL 2009