更新数据库时我应该更喜欢什么?两种方法的优缺点是什么?何时使用其中一种方法?
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) 一些令人困惑的解释:flush(); 刷新是将底层持久存储与内存中保持的持久状态同步的过程.它将在正在运行的事务中更新或插入到表中,但它可能不会提交这些更改.
如果只有在提交之后才会在数据库中保留更改,那么为什么要在代码中间进行刷新.
并且在运行刷新之后,如果对托管对象进行了任何更改,那么将抛出异常,或者这些将被同步,然后将变为永久.如果他们得到同步,那么为什么要在第一时间冲洗.
在@Transactional 方法中间调用Hibernate flush() 是否有可能将不完整的结果保存在数据库中?例如,这个函数是否有可能将“John”保存到数据库中?
@Transactional
public void tt() {
Student s = new Student("John");
em.persist(s);
em.flush();
// Perform some calculations that change some attributes of the instance
s.setName("Jeff");
}
Run Code Online (Sandbox Code Playgroud)
我用 H2 内存数据库尝试过它,它没有保存不完整的事务更改。但是在某些条件下是否可能并且可能使用另一个数据库引擎?