Cyb*_*bex 5 java sql spring hibernate jpa
在@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 内存数据库尝试过它,它没有保存不完整的事务更改。但是在某些条件下是否可能并且可能使用另一个数据库引擎?
在您致电em.commit()或交易结束之前,它不应保存任何内容。我找到的最好的解释来自这里。下面是重要的摘录:
此操作将导致对数据库执行 DML 语句(插入/更新/删除等),但不会提交当前事务。这意味着 flush() 不会使当前更改对其他 EntityManager 实例或其他外部数据库客户端可见;这只会在事务提交时发生。换句话说,flush() 操作只会将当前内存缓存从 EntityManager 刷新到数据库会话。
所以刷新可能会引发一些 JPA 异常,但它实际上不会在事务结束之前提交到数据库。
相关问题:JPA 刷新 vs 提交
| 归档时间: |
|
| 查看次数: |
11501 次 |
| 最近记录: |