1

2 つの永続ユニットで動作するアプリケーションを開発しました。アプリケーションは、1 つの PU1 からエンティティを取得し、ループで処理します。

このループでは、PU2 のレコードを更新し、最後に PU1 エンティティを更新して処理済みとしてマークします。

正常に動作していますが、問題は、PU1 エンティティのトラバースごとに PU2 を開始/コミットする必要があるため、パフォーマンスの問題に直面していることです。

try{
em1.getTransaction.begin();
Query query = em1.createNamedQuery("Request.SELECT_ALL");
query.setMaxResults(1000);
List<LoaneeRefill> requests = query.getResultList();

for (Request vo : requests) {

 em2.getTransaction.begin();

 Response r =new Resopnse();
 r.setNumber(vo.getNumber);

 em2.persist(r);

 em2.getTransaction.commit();

 vo.setStatus("Y");
 em1.merge(vo);
 }


 em1.getTransaction.commit();
 }catch(Exception e){}

上記のコードは、パフォーマンスの問題を引き起こしているか、多数のリクエストに多くの時間がかかっています。

次のコードを試しましたが、エラーが発生しました。

 try{
 em1.getTransaction.begin();
 em2.getTransaction.begin();

 Query query = em1.createNamedQuery("Request.SELECT_ALL");
 query.setMaxResults(1000);
 List<LoaneeRefill> requests = query.getResultList();

 for (Request vo : requests) {

 Response r =new Resopnse();
 r.setNumber(vo.getNumber);

 em2.persist(r);

 vo.setStatus("Y");
 em1.merge(vo);
 }


 em2.getTransaction.commit();
 em1.getTransaction.commit();
 }catch(Exception e){}

エラー:

javax.persistence.PersistenceException: Exception [EclipseLink-7197] (Eclipse Persistence Servi
ces - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Null or zero primary key encountered in unit of work clone

編集:

PU1 からエンティティのリストを取得して切り離す場合の提案。次に、それらのリクエストを処理し、1 つの更新またはその他の方法でリストを更新します。

4

1 に答える 1