在JPA
中,是否保证以下代码段的事务语义(=从数据库角度来看效果)是相同的?
代码段A
EntityManager em = ...
List<Work> workList = ...
for(Work work : workList)
{
doWork(work); //may change some entities
}
em.getTransaction().commit();
摘录B
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()
能够处理它??
答案 0 :(得分:1)
Flush将所有更改推送到数据库中; clear将无法回滚或撤消这些更改,因为它只会影响上下文中当前加载的内容。 em.flush()后跟em.clear()是一种常见模式,用于减少在同一事务中进行工作时长时间运行的事务中使用的已加载实体的数量。