openJPA 批量更新模式

openJPA batch update pattern

我需要更新数以千计的实体,逻辑无法放入 SQL 语句中。使用非托管 JPA 时,我使用的模式是:

long commitThreshold = 100;  // or other appropriate value
try {
  em.beginTransction().begin();
  for(list of entities to be modified) {
      // retrieve current Entity
      // modify current Entity 

      if((++modifiedEntityCount % commitThreshold) == 0) {
        em.getTransaction().commit();
        em.getTransaction().begin();
      }
  }
  if(em.getTransaction().isActive()) {
      em.getTransaction().commit();
  }
catch () {
}
finally {
    // cleanup 
}

在托管环境中,这会导致

java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers.

在使用容器管理的事务和蓝图时,对于此类用例,什么是好的模式?我的具体环境是 karaf 3.0.5 和 openJPA 2。3.x 如果重要的话。

更新您的 persistence.xml 配置以使用语句批处理

OpenJPA Statement batching