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 つの更新またはその他の方法でリストを更新します。