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(), является общим шаблоном, используемым для уменьшения количества загруженных объектов, используемых в длительной транзакции, в то время как работа продолжается в той же транзакции.