当hibernate关闭会话时,close的目的基本上是关闭底层连接并清理第一级缓存。为什么同花顺也不会在这里自动发生?
答案 0 :(得分:7)
从transactional的角度来看,flushing与关闭会话非常不同,flush
应该发生在事务的边界内(或commit
时间) :
结束会话通常涉及四个 不同的阶段:
- 刷新会话
- 提交交易
- 关闭会话
- 处理例外
另一方面,关闭会话(和底层连接)应该在事务结束后完成(关闭连接时挂起事务的行为未定义)。
因此没有理由在关闭时做任何事情并促进不良语义,并且具有不同的操作是完全合理的。
总结一下:
SessionFactory#getCurrentSession()
并且您不必Session#close()
自己(Session
将在提交时关闭)。