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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • Klemens Torggler

    Klemens Torg

    11 Mart 2008