13

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

所以这是我的实际问题:

  • Commit使用刷新模式而不是更好Auto吗?和
  • 文档中的这句话是什么意思?

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

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

4

2 回答 2

10

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

如果你不想保存东西,你应该使用分离的对象。要么使用 aStatelessSession加载它们,要么在加载对象后调用 detach。这会将它们从将自动保存它们的监视中删除。

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

于 2015-01-23T17:53:50.190 回答
7

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

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

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

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

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

于 2013-08-09T17:56:41.043 回答