Hibernate 的 Session 的刷新点 和同步点
刷新点,同步点 ,说实话,这两个概念命名其实不准确, 这两个点的本质其实就是 与数据库的交互。
了解下面内容前,我们先提一下要注意的点: 一个是 向数据库发出操作SQL,一个是 事务的 commit,两个阶段是分离的。
刷新点:
hibernate在执行到 insert、update、delete 等一些操作时,不会立即向数据库发出操作SQL,而是积累后续一些操作后,做一些整合优化后,再一次向数据库发出操作SQL。
而向 向数据库发出 insert、update、delete(注意,不包括select) 操作SQL 的 时机,就是 刷新点。
啥时候会触发刷新点呢?
1、执行Query查询
这个好理解,你在select 时,如果不把前面进行的 insert、update、delete 的语句往数据库发,查询的结果会正确吗?
当然这还需要看hibernate的FlushMode的设置情况。
如果FlushMode是设置成 COMMIT 或 MANUAL, select时也并不会向数据库发出DML语句。
FlushMode 具体详见 Hibernate 处理 大数据量的只读数据。
2、session.fulsh()操作 这个是人为要求刷新,要求把前面还没发给数据库的操作 发给数据库。
3、执行事务的提交 这个是事务要提交了,前面还没发给数据库的操作 当然要马上发了。
同步点:
说白了,就是事务提交...
所以,这两个概念真心没必要存在...一个是hibernate在认为合适的时候往数据库发DML请求,一个就是事务提交。
浙公网安备 33010602011771号