Я пытаюсь обновить таблицу в пакетном режиме.Ниже моя конфигурация:
spring.jpa.properties.org.hibernate.flushMode=COMMIT
spring.jpa.properties.hibernate.jdbc.batch_size=10
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.org.hibernate.SQL=DEBUG
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true
Ниже приведены методы, где на самом деле:
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void updateEmployeeDetails(Map<String, List<String>> orgEAMap) {
....
updateEmployee(employeeMap);
}
public void updateEmployee(Map<String, String> employeeMap) {
//int i =0;
for (Entry<String, String> mapEntry : employeeMap.entrySet()) {
Query query = em.createNativeQuery("UPDATE employee emp SET emp.name = :name WHERE emp.id = :id");
query.setParameter("id", mapEntry.getValue());
query.setParameter("name", mapEntry.getKey());
query.executeUpdate();
//if(i==10){
//LOG.info("Flushmode"+em.getFlushMode());
//em.flush();
//}
//i++;
}
}
Я попытался сбросить после определенного подсчета вручную, но сброс (частичное сбрасывание) уже происходитпосле выполнения каждого запроса.Из журналов статистики видно, что создается 10 операторов, и происходит 0 пакетных операций и сбросов.