我想澄清基本的三点:
在旧会话上开始新的数据库事务是否获得新连接并恢复会话?
提交数据库事务是否断开JDBC连接中的会话并将连接返回到池中?
根据Hibernate文档,早期版本的Hibernate需要显式断开和重新连接会话。这些方法已被弃用,因为开始和结束事务具有相同的效果。它们怎么有相同的效果呢?
我想澄清基本的三点:
在旧会话上开始新的数据库事务是否获得新连接并恢复会话?
提交数据库事务是否断开JDBC连接中的会话并将连接返回到池中?
根据Hibernate文档,早期版本的Hibernate需要显式断开和重新连接会话。这些方法已被弃用,因为开始和结束事务具有相同的效果。它们怎么有相同的效果呢?
Hibernate Session是一个事务性的写入缓存,将实体状态转换为DML语句。Hibernate Session可以连接或断开与数据库的连接。当它断开连接时,它无法将当前挂起的实体状态更改刷新到底层数据库。
有多种方法将Hibernate Session与数据库事务关联:
在处理数据库事务时,有两种不同的方法:
RESOURCE_LOCAL事务,使用单个数据源始终将物理数据库事务绑定到Hibernate Session(在单个逻辑事务的上下文中,这意味着您仍然可以实现长时间的对话以跨越多个这样的逻辑事务)。
JTA,使用多个数据源。JTA状态表明连接应在每个语句之后积极释放,但实际上,在单个逻辑事务的上下文中,您仍将获得相同的JDBC连接句柄。
现在回答你的问题:
- 在旧会话上开始新的数据库事务是否会获得新连接并恢复会话?
是的。Hibernate会话将重新连接,刷新/提交可以继续进行。
- 提交数据库事务是否会断开会话与JDBC连接并将连接返回到池中?
默认情况下,当您提交事务时,会话将关闭,底层连接也将关闭。如果您使用连接池,则数据库连接确实会返回到池中。
这些方法已被弃用,因为连接管理现在由连接释放模式控制。
- 根据Hibernate文档,早期版本的Hibernate需要显式断开和重新连接会话。这些方法已被弃用,因为事务的开始和结束具有相同的效果。它们如何具有相同的效果?