Шаблон пакетного обновления openJPA

Мне нужно обновить тысячи сущностей, и логика не может быть помещена в инструкцию 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, если это имеет значение.


person Timothy Vogel    schedule 26.03.2016    source источник


Ответы (1)


Обновите конфигурацию persistence.xml, чтобы использовать пакетную обработку операторов.

Пакетная обработка запросов OpenJPA

person Matt Pavlovich    schedule 30.03.2016