【发布时间】:2009-12-28 11:48:46
【问题描述】:
当hibernate关闭一个会话时,关闭的目的基本上是关闭底层连接和清理一级缓存。为什么刷新也不会在这里自动发生?
【问题讨论】:
标签: hibernate session orm flush
当hibernate关闭一个会话时,关闭的目的基本上是关闭底层连接和清理一级缓存。为什么刷新也不会在这里自动发生?
【问题讨论】:
标签: hibernate session orm flush
从transactional的角度来看,flushing与关闭会话有很大不同,flush应该发生在事务的边界内(或commit时间):
结束会话通常涉及四个 不同的阶段:
- 刷新会话
- 提交事务
- 关闭会话
- 处理异常
另一方面,关闭会话(和底层连接)应该在事务结束后完成(关闭连接时待处理事务的行为是未定义)。
因此,没有理由在关闭时做任何事情并促进不良语义,并且具有不同的操作是完全合理的。
总结一下:
SessionFactory#getCurrentSession(),您不必自己使用Session#close()(Session 将在提交时为您关闭)。【讨论】: