我是hibernate的新手.我对交易和冲洗有疑问..
每当我们想要持久化对象时,我们就会打开一个会话并开始一个事务.坚持哪一个先来,另一个先来......
1)session.getTransaction.commit(); 2)调用Session.flush()
根据我读过的内容,commit()将值提交给数据库.flush()将对象状态同步到数据库.
这两者有什么区别.
session.flush() 将执行刷新过程,该过程是关于对由hibernate会话管理的所有持久对象进行脏检查.如果一个对象被认为是脏的(即,该hibernate会话中存储的对象的任何值都不同于数据库中的相应记录) ),hibernate会立即向DB发出UPDATE SQL,以便同步这些差异,使存储在hibernate会话中的对象与相应的数据库记录具有相同的值.
但是,仅发出UPDATE SQL并不意味着修改后的数据实际上已保存到DB中,您必须COMMIT事务以确认实际将修改后的数据保存到DB.这也意味着您可以ROLLBACK所做的更改如果在发出UPDATE SQL之后但在提交事务之前发现任何错误,则通过UPDATE SQL.
休眠会话的刷新行为FlushMode由session.setFlushMode()配置的参数决定.默认值是FlushMode.AUTO这样session.flush()的意愿提交查询的交易,并在执行前自动发生.
因此,session.getTransaction.commit()在默认情况下调用时FlushMode,session.flush()将在执行之前隐式执行session.getTransaction.commit().
| 归档时间: |
|
| 查看次数: |
7706 次 |
| 最近记录: |