EntityManager的。 Flush()是否将数据保存为Commit()?

时间:2017-07-29 16:39:07

标签: java jpa entitymanager

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

另外我发现有时 flush()会在 select 请求到数据库时自动执行,此时它会检查数据库的示例约束,以便持久化对象出错由于选择期间的约束,将抛出异常。

其实我想明白:

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

  2. 使用 flush()代替 commit()有什么好处,可能在某些具体情况下?

1 个答案:

答案 0 :(得分:2)

感谢JB Nizet,现在有一些关于 flush()的清晰度。

以下是一些要点:

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