JPA 2.1、Oracle DBを使用していて、削除対象のエンティティ(約430000 ids)のIDリストを持っています。最初は、idリストを1000個の小さなIDごとに分割し、それらをJPQLのパラメータとして渡して実行するように実装されました。JPA CriteriaDeleteと大きなパラメータ
delete from SOPFilter f where f.id in (?1)
その後、私はJPA CriteriaDeleteを使用するように変更したいです。
CriteriaDelete<SOPFilter> criteriaDelete = cb.createCriteriaDelete(SOPFilter.class);
Root<SOPFilter> from = criteriaDelete.from(SOPFilter.class);
criteriaDelete.where(from.get(SOPFilter_.id).in(sopFilterIds));
それが第九万1に到達し、それが
org.hibernate.SessionExceptionここで停止させ、実行時例外があるまで、それは正常に動作:セッションが
を閉じているとしますが、エンティティマネージャファクトリを閉じます。
INFO:bernate.impl.StmpContainerEntityManagerFactoryBean:この例外
のjava.langと私の最初のポストで誤解された
誰のための永続ユニット 'IMOFFERINGMANAGEMENT' のJPAのEntityManagerFactoryを閉じます。 IllegalStateException:EntityManagerFactoryが閉じられている
catch clそれを投げる前にレコードをデータベースに追加することによって実行時例外を処理することができます。また、イベントレコードを追加するために、工場から別のエンティティマネージャを作成しようとしますが、これは現在閉じられています。
public static void logEvent(EntityManager em) {
EntityManager em2 = null;
EntityManagerFactory emFactory = em.getEntityManagerFactory();
em2 = emFactory.createEntityManager();
// ...
}
誰もがそれを軽視できますか?
上
もあるかもしれませんタイムアウトあなたはJPA CriteriaDeleteを使用しているか、いくつかの詳細を与える - あなたはヒントを設定することができます。また、あなたの質問によると、あなたは約43000のIDを持っており、コントロールが90000行に達すると例外がスローされましたか?それは9000番目の行ですか? –
EMFはどのように閉じられますか? finallyブロックの一部といくつかの例外がスローされましたか?推測は、人々がその情報でここで行うことができるすべてです –
私はドナルドトランプの声でタイトルを読んで変ですか? – shmosel