Loc*_*han 4 java hibernate flush
在Hibernate中,我想知道当flushMode为AUTO时哪些条件会触发刷新?它可能很复杂(或"魔术"),但基本条件是什么?
谢谢
Dmi*_*try 10
当刷新模式是FlushMode.AUTO它会发生在以下时间:
此模式的目的是避免"陈旧"状态.对内存中的对象所做的更改可能会与查询结果发生冲突.我的理解是Hibernate将进行"脏检查",比较对象的原始状态和当前状态.如果它们不同并且Hibernate认为这种差异将使您暴露于陈旧数据,它将尝试将此状态推送到数据库.这是可能的,因为Hibernate知道查询将"触及"哪些表以及更新当前脏状态需要哪些表.
看看这篇文章:
尽管某些情况可能难以检测,但自动冲洗在何时冲洗时非常智能.为了提高性能,Hibernate不会简单地总是刷新所有内容,而是查看数据库中查询所涉及的表以及应该存储在这些表中的内存中的数据.如果没有重叠,则不会保留任何数据.如果找到重叠,则将刷新整个会话,以确保一致性.
您还可以查看org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush 源代码.
有几个缺点FlushMode.AUTO:
由于这些缺点,我更喜欢FlushMode.COMMIT它,让你更多的控制.在这种模式下,Hibernate会一直等到显式调用Commit或Flush,然后才会在内存状态与数据库同步.
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |