如何使用刷新模式“自动”或“提交”

2022-09-04 20:10:52

正如我的标题所述,我正在应用程序中使用休眠刷新模式机制。因此,当我更改休眠持久性对象中的任何数据时,它会自动反映在数据库中。我不想要这个。所以我找到了一个使用FlushMode的解决方案。AutoCommit

所以这是我的实际问题:

  • 使用冲洗模式而不是更好吗?和CommitAuto
  • 文档中此声明的含义是什么?

    会话有时会在执行查询之前刷新,以确保查询永远不会返回过时状态。

http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/FlushMode.html


答案 1

休眠(和 JPA)旨在自动检测对数据库的持久对象所做的更改并将其持久化。没有“保存”操作。

如果不希望保存内容,则应使用分离的对象。使用 a 加载它们,或在加载对象后调用 detach。这会将它们从将自动保存它们的监视中删除。StatelessSession

不要弄乱冲洗设置,它只会让你以后头疼。


答案 2

使用提交刷新模式而不是自动更好吗?

当应用程序使用查询时,很可能会表现得更好,因为它不会在每个查询之前刷新会话。我知道每个javadoc它应该只在必要时刷新会话,但根据我的经验,FlushMode.COMMIT在只读会话中表现得更好。自动刷新并不意味着对持久性对象的任何更改都会立即发布到数据库。FlushMode.COMMIT

文档中指定的以下语句的含义是什么

会话有时会在执行查询之前刷新,以确保查询永远不会返回过时状态。

正如我上面所写的那样,当使用FlushMode.AUTO(默认)时,它将在对数据库进行每个查询(HQL,Criteria,SQL查询)之前刷新会话,以确保结果将包含当前会话中添加的所有实体。


推荐