使用什么冲洗模式'自动'或'提交'

com*_*mit 11 java session spring hibernate

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

所以这是我的实际问题:

  • 使用Commit刷新模式而不是Auto?和
  • 文档中此声明的含义是什么?

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

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

vit*_*dze 7

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

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

文件中指定的以下声明的含义是什么

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

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

  • 我首先阅读文档,然后来到这里,我认为这个答案清楚地解释了文档中的含义.虽然,"会话有时被刷新......"并不意味着它在每次查询之前都会被刷新.这里解释了"有时"的含义http://java.dzone.com/articles/dark-side-hibernate-auto-flush (3认同)

Bar*_*ett 7

Hibernate(和JPA)旨在自动检测并持久保存对数据库的持久对象的更改.没有"保存"操作.

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

不要搞乱冲洗设置,它会让你头疼.