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

lal*_*lit 2 orm session hibernate flush

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

Pas*_*ent 7

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

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

  • 刷新会话
  • 提交交易
  • 关闭会议
  • 处理异常

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

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

总结一下:

  1. 只需使用事务和正确的划分(如果需要,会话将在提交时刷新,具体取决于FlushMode).
  2. 使用SessionFactory#getCurrentSession(),你不需要Session#close()自己(Session在提交时你将关闭).

  • @Ittai没有SQL语句可以发送到数据库事务之外的数据库. (2认同)