关于java:EntityManager。 Flush()是否将数据保存为Commit()?

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

我已经浏览了有关entityManager.flush()方法的许多主题。
在我的实践中,我一直使用过persist()和commit()方法。

我也发现有时flush()在对数据库的选择请求期间自动执行,并且此时它检查数据库的约束,因此,如果由于选择期间的约束而导致持久化对象错误,则将引发异常。

其实我想了解:

  • 当您执行flush()方法时,持久化的数据是否会保存在数据库中? 所以您不需要在flush()之后执行commit()吗?

  • 在某些具体情况下,使用flush()而不是commit()有什么优点?


  • 多亏了JB Nizet,现在对flush()有了一些清晰的认识。

    这里有几点:

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