JPA: изменится ли em.clear() после em.flush() семантика транзакций?

В JPAГарантируется ли, что семантика транзакций (= эффекты с точки зрения базы данных) следующих фрагментов идентичны?

Фрагмент А

EntityManager em = ...
List<Work> workList = ...
for(Work work : workList)
{
  doWork(work); //may change some entities
}
em.getTransaction().commit();

Фрагмент Б

EntityManager em = ...
List<Work> workList = ... 
for(Work work : workList)
{
  doWork(work); //may change some entities
  em.flush(); 
  em.clear();
}
em.getTransaction().commit();


Другими словами:
Можно em.clear() после em.flush() изменить транзакционную семантику (помимо того, что em.clear() отделяет все сущности; можно предположить, что doWork() способен справиться с этим)?

1 ответ

Flush помещает все изменения в базу данных; clear ничего не сделает для отката или отмены этих изменений, поскольку это влияет только на то, что в данный момент загружено в контексте. em.flush(), за которым следует em.clear(), является общим шаблоном, используемым для уменьшения количества загруженных объектов, используемых в длительной транзакции, в то время как работа продолжается в той же транзакции.

Другие вопросы по тегам