gpt4 book ai didi

java - 实体管理器。 Flush()是否像Commit()一样将数据保存到数据库中?

转载 作者:行者123 更新时间:2023-11-30 02:27:01 25 4
gpt4 key购买 nike

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

我还发现有时flush()会在对数据库的select请求期间自动执行,此时它会检查数据库的示例约束,以便持久化对象是否错误由于 select 期间的限制,将引发异常。

其实我想了解的是:

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

  2. 在某些具体情况下,使用flush()代替commit()有什么优势?

最佳答案

感谢 JB Nizet,现在我们对flush()有了一些清晰的了解。

这里有一些要点:

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

关于java - 实体管理器。 Flush()是否像Commit()一样将数据保存到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45391639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com