实体管理器。 Flush() 是否将数据库中的数据保存为 Commit()?
EntityManager. Does Flush() save data in database as Commit()?
我已经浏览了许多关于 entityManager.flush() 方法的主题。
在我的实践中,我总是使用 persist() 和 commit() 方法。
我还发现有时 flush() 在 select 请求数据库时自动执行,此时它检查数据库的示例约束,因此如果由于 select 期间的约束导致持久对象错误,将抛出异常。
其实我想了解一下:
当你执行 flush() 方法时,持久化数据会保存在数据库中吗?所以你不需要在 flush()?
之后做 commit()
用flush()代替commit()有什么好处,可能在一些具体的案件?
感谢 JB Nizet 现在对 flush().
有了一些了解
这里有几点:
- 要将数据永久保存在数据库中,JPA 需要使用以下命令插入数据
insert/update/delete 语句,然后提交此数据。
提交交易总是必要的。
- Flush() 方法只执行 insert/update/delete 语句而不提交数据,因此可以回滚事务和数据。
- 当您执行 commit() 时,JPA 在提交之前刷新数据,即执行 flush() 方法。
- 在 flush() 期间,在执行 sql 语句并将数据放入数据库时检查数据库中的约束。
- 当隔离级别设置为 READ_COMMITTED 时,执行 flush() 后的数据不会在其他事务中看到,因为 flush() 不会提交数据。
我已经浏览了许多关于 entityManager.flush() 方法的主题。 在我的实践中,我总是使用 persist() 和 commit() 方法。
我还发现有时 flush() 在 select 请求数据库时自动执行,此时它检查数据库的示例约束,因此如果由于 select 期间的约束导致持久对象错误,将抛出异常。
其实我想了解一下:
当你执行 flush() 方法时,持久化数据会保存在数据库中吗?所以你不需要在 flush()?
之后做 commit()
用flush()代替commit()有什么好处,可能在一些具体的案件?
感谢 JB Nizet 现在对 flush().
有了一些了解这里有几点:
- 要将数据永久保存在数据库中,JPA 需要使用以下命令插入数据 insert/update/delete 语句,然后提交此数据。 提交交易总是必要的。
- Flush() 方法只执行 insert/update/delete 语句而不提交数据,因此可以回滚事务和数据。
- 当您执行 commit() 时,JPA 在提交之前刷新数据,即执行 flush() 方法。
- 在 flush() 期间,在执行 sql 语句并将数据放入数据库时检查数据库中的约束。
- 当隔离级别设置为 READ_COMMITTED 时,执行 flush() 后的数据不会在其他事务中看到,因为 flush() 不会提交数据。