当hibernate关闭一个session时,close的目的基本上是为了关闭底层连接和清理一级缓存。为什么冲洗也不会在这里自动发生?
请您参考如下方法:
来自transactional观点,flushing与关闭 session 有很大不同,flush
应该发生在事务边界内(或在 commit
时):
Ending a Session usually involves four distinct phases:
- flush the session
- commit the transaction
- close the session
- handle exceptions
另一方面,关闭 session (和底层连接)应该在事务结束后完成(关闭连接时未决事务的行为是未定义)。
因此没有理由在 close 上做任何事情并促进不良语义,并且拥有不同的操作是非常有意义的。
总结:
- 只是使用事务和适当的分界,如您所愿(如果需要, session 将在提交时刷新,具体取决于 FlushMode)。
- 使用
SessionFactory#getCurrentSession()
,您将不必自己Session#close()
(Session
将关闭你在提交时间)。