当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 上做任何事情并促进不良语义,并且拥有不同的操作是非常有意义的。

总结:

  1. 只是使用事务和适当的分界,如您所愿(如果需要, session 将在提交时刷新,具体取决于 FlushMode)。
  2. 使用 SessionFactory#getCurrentSession(),您将不必自己Session#close()(Session 将关闭你在提交时间)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!