我想清除基本的3点,
在旧会话上开始新的数据库事务是否获得了 新连接并恢复会话?
提交数据库事务是否会断开与会话的连接 JDBC连接并返回到池的连接?
从Hibernate Documentation,需要早期版本的Hibernate 显式断开连接并重新连接会话。这些方法 不推荐使用,asbuginning和结束事务具有相同的功能 影响。他们如何产生同样的效果?
答案 0 :(得分:11)
Hibernate会话只是一个将write-behind cache转换为DML语句的事务性entity state transitions。 Hibernate会话可以与数据库连接或断开连接。当它断开连接时,它无法将当前暂挂的实体状态更改刷新到底层数据库。
associate a Hibernate Session to a database transaction有多种方式:
在数据库事务方面,有两种不同的方法:
RESOURCE_LOCAL事务,使用单个DataSource将始终将物理数据库事务绑定到Hibernate会话(在单个逻辑事务的上下文中,这意味着您仍然可以实现长对话以跨越多个此类逻辑事务)
JTA,使用多个DataSource。 JTA声明连接应该在每个语句之后积极地释放,但它会练习您在单个逻辑事务的上下文中仍然获得相同的JDBC连接句柄。
现在回到你的问题:
- 在旧会话上开始新的数据库事务是否会获得新连接并恢复会话?
醇>
是。重新连接Hibernate会话,可以继续刷新/提交。
- 提交数据库事务是否会断开会话与JDBC连接并将连接返回到池?
醇>
默认情况下,提交事务时,将关闭会话并关闭基础连接。如果使用connection pooling,数据库连接将确实返回池。
- 从Hibernate Documentation,早期版本的Hibernate需要显式断开连接并重新连接Session。这些 不推荐使用方法,因为事务的开始和结束都有 同样的效果。他们如何产生同样的效果?
醇>
这些方法已弃用,因为connection management现在由connection release modes控制。