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

Kir*_* Ch 3 java jpa entitymanager

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

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

其实我想明白:

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

  2. 在某些具体情况下,使用flush()而不是commit() 有什么好处?

Kir*_* Ch 5

感谢 JB Nizet 现在对flush()有了一些清晰的认识。

这里有几点:

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