Shi*_*han 11 session hibernate database-connection jpa connection-pooling
我想清除基本的3点,
是否在旧会话上开始新的数据库事务会获得新连接并恢复会话?
提交数据库事务是否会断开会话与JDBC连接并将连接返回到池?
从Hibernate Documentation,早期版本的Hibernate需要显式断开连接并重新连接Session.不推荐使用这些方法,因为开始和结束事务具有相同的效果.它们如何产生同样的效果?
Vla*_*cea 16
Hibernate Session只是一个事务性的后写缓存,它将实体状态转换转换为DML语句.Hibernate会话可以与数据库连接或断开连接.断开连接时,它无法将当前暂挂的实体状态更改刷新到底层数据库.
有多种方法可以将Hibernate Session与数据库事务关联起来:
在数据库事务方面,有两种不同的方法:
使用单个DataSource的RESOURCE_LOCAL事务将始终将物理数据库事务绑定到Hibernate会话(在单个逻辑事务的上下文中,这意味着您仍然可以实现长对话以跨越多个此类逻辑事务).
JTA,使用多个DataSource.JTA 声明在每个语句之后应该积极地释放连接,但是它实践中仍然在单个逻辑事务的上下文中获得相同的JDBC连接句柄.
现在回到你的问题:
- 是否在旧会话上开始新的数据库事务会获得新连接并恢复会话?
是.重新连接Hibernate会话,可以继续进行刷新/提交.
- 提交数据库事务是否会断开会话与JDBC连接并将连接返回到池?
默认情况下,提交事务时,将关闭会话并关闭基础连接.如果使用连接池,则数据库连接确实将返回池.
- 从Hibernate Documentation,早期版本的Hibernate需要显式断开连接并重新连接Session.不推荐使用这些方法,因为开始和结束事务具有相同的效果.它们如何产生同样的效果?