实体管理器。 Flush() 是否将数据库中的数据保存为 Commit()?

EntityManager. Does Flush() save data in database as Commit()?

我已经浏览了许多关于 entityManager.flush() 方法的主题。 在我的实践中,我总是使用 persist()commit() 方法。

我还发现有时 flush()select 请求数据库时自动执行,此时它检查数据库的示例约束,因此如果由于 select 期间的约束导致持久对象错误,将抛出异常。

其实我想了解一下:

  1. 当你执行 flush() 方法时,持久化数据会保存在数据库中吗?所以你不需要在 flush()?

  2. 之后做 commit()
  3. flush()代替commit()有什么好处,可能在一些具体的案件?

感谢 JB Nizet 现在对 flush().

有了一些了解

这里有几点:

  1. 要将数据永久保存在数据库中,JPA 需要使用以下命令插入数据 insert/update/delete 语句,然后提交此数据。 提交交易总是必要的。
  2. Flush() 方法只执行 insert/update/delete 语句而不提交数据,因此可以回滚事务和数据。
  3. 当您执行 commit() 时,JPA 在提交之前刷新数据,即执行 flush() 方法。
  4. flush() 期间,在执行 sql 语句并将数据放入数据库时​​检查数据库中的约束。
  5. 当隔离级别设置为 READ_COMMITTED 时,执行 flush() 后的数据不会在其他事务中看到,因为 flush() 不会提交数据。