我们开发了一个在两个持久性单元上工作的应用程序。应用程序从一个 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 获得实体列表并将它们分离,有什么建议。然后处理这些请求并使用一种更新或任何其他方式更新列表。