为什么hibernate session.close()不会自动刷新数据?

时间:2009-12-28 11:48:46

标签: hibernate session orm flush

当hibernate关闭会话时,close的目的基本上是关闭底层连接并清理第一级缓存。为什么同花顺也不会在这里自动发生?

1 个答案:

答案 0 :(得分:7)

transactional的角度来看,flushing与关闭会话非常不同,flush应该发生在事务的边界内(或commit时间) :

  

结束会话通常涉及四个   不同的阶段:

     
      
  • 刷新会话
  •   
  • 提交交易
  •   
  • 关闭会话
  •   
  • 处理例外
  •   

另一方面,关闭会话(和底层连接)应该在事务结束后完成(关闭连接时挂起事务的行为未定义)。

因此没有理由在关闭时做任何事情并促进不良语义,并且具有不同的操作是完全合理的。

总结一下:

  1. 只需按照您的意愿使用事务和正确的分界(如果需要,会话将在提交时刷新,具体取决于FlushMode)。
  2. 使用SessionFactory#getCurrentSession()并且您不必Session#close()自己(Session将在提交时关闭)。