Rox*_*Rox 44 java jpa eclipselink
更新数据库时我应该更喜欢什么?两种方法的优缺点是什么?何时使用其中一种方法?
public void disemployEmployee(Integer employeeId, Date endDate) {
Employee employee = (Employee)em.find("Employee", employeeId);
employee.getPeriod().setEndDate(endDate);
em.flush();
}
public void disemployEmployee(Integer employeeId, Date endDate) {
Employee employee = (Employee)em.find("Employee", employeeId);
em.getTransaction().begin();
employee.getPeriod().setEndDate(endDate);
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
Nay*_*kar 46
在您的第一个示例中,数据更改在遇到刷新后反映在数据库中,但仍处于事务中.
但在第二个示例中,您将立即提交事务.因此,对数据库进行更改并且事务也在那里结束.
有时,flush可能有用于在正在进行的事务之间保留数据,然后最终提交更改.因此,如果之后出现问题,您也可以回滚以前的更改,例如批量插入/更新.
Dat*_*eus 15
你确实读过了刷新和提交的javadoc并且知道flush只是在一个事务中使用吗?它刷新(但不提交),而commit提交数据(显然).他们是独特的; 没有"偏好".第一个例子是错误的,并且应该在调用flush时产生异常(TransactionRequiredException)
您的两个代码示例都不会保留或合并要写入数据库的实体状态。
EntityManager.flush()我认为比较和不合适EnityManager.EntityTransaction.commit()。
lush() 必须包含在事务上下文中,除非需要(在极少数情况下),否则您不必显式执行此操作,而 EntityTransaction.commit() 会为您执行此操作。
请参阅此链接在这种情况下是否有必要调用flush()(JPA接口)?
请参阅此链接关于在调用查询之前使用 JPA 进行刷新的问题以使用flush()的场景
| 归档时间: |
|
| 查看次数: |
79854 次 |
| 最近记录: |