2016-08-16 17 views
6

JPA 2.1, Oracle DB kullanıyorum ve kaldırılacak varlıklar için bir ids listesi var (yaklaşık 430000 kimlikleri). İlk olarak, 1000 ids ile daha küçük olan her birine kimlik listesi ayırma, JPQL için parametreler olarak geçirme ve yürütme olarak uygulandı.JPA KriterleriDeğerli parametrelerEkran

delete from SOPFilter f where f.id in (?1)

Sonra ben JPA CriteriaDelete kullanmak değiştirmek istiyorum.

CriteriaDelete<SOPFilter> criteriaDelete = cb.createCriteriaDelete(SOPFilter.class); 
Root<SOPFilter> from = criteriaDelete.from(SOPFilter.class); 
criteriaDelete.where(from.get(SOPFilter_.id).in(sopFilterIds)); 

o 90000 tane ulaşmak ve onu

org.hibernate.SessionException burada durdurmak için neden bir çalışma zamanı istisna vardır dek işime çalışır: Oturum

kapatılır ve yapmak varlık yöneticisi fabrikası kapanacak.

BİLGİ: bernate.impl.StmpContainerEntityManagerFactoryBean: Bu istisna

java.lang ile ilk postayla saptırmak

kimin için sebat birimi 'IMOFFERINGMANAGEMENT' için JPA EntityManagerFactory kapatılıyor. IllegalStateException: EntityManagerFactory,

Yakalama yapıldı Runtime atmadan önce veritabanına bir kayıt ekleyerek çalışma zamanı özel durumunu işlemek için. Ve bir olay kaydı eklemek için, şu anda kapalı olan fabrikadan başka bir varlık yöneticisi oluşturmaya çalışır.

public static void logEvent(EntityManager em) { 
    EntityManager em2 = null; 
    EntityManagerFactory emFactory = em.getEntityManagerFactory(); 
    em2 = emFactory.createEntityManager(); 
    // ... 
} 

Herkes üzerinde biraz ışık tutabilir mi?

+1

üzerinde

query.setHint("javax.persistence.query.timeout", 8000); 

da olabilir zaman aşımları JPA CriteriaDelete nasıl kullandıklarını biraz daha bilgi verin - Bir ipucu ayarlayabilirsiniz. Ayrıca sorunuza göre kontrolünüz 90000 satıra ulaştığında yaklaşık 43000 kimliğiniz var ve istisna atıldı mı? 9000'inci sırada mı demek istiyorsun? –

+0

EMF nasıl kapatılabilir? Sonunda bir bloğun parçası ve bazı istisnalar atıldı? tahmin etmek, insanların bu bilgi ile yapabilecekleri her şeydir –

+0

Donald Trump'un sesindeki başlığı okuduğum garip mi? – shmosel

cevap

0

Kodunuzda açık değilim, ancak büyük olasılıkla bir işlem zaman aşımı yapıyorsunuz demektir. Veritabanı tarafında

+0

Daha fazla kayıt ekledikten sonra, EMF'nin kapanmasına neden olan gerçek bir istisna alıyorum. org.hibernate.SessionException: Oturum kapalı. Uzun süren bir operasyon, sanırım bahsettiğin zaman aşımıyla ilgili olabilir. – pirent

+0

İstisna neydi? – farrellmr

+0

evet bir zaman aşımı gibi geliyor – farrellmr