数据库连接的释放模式分析

本文介绍了Hibernate2.x和3.x中JDBC连接管理的区别,重点分析了Hibernate3的三种连接释放模式:ON_CLOSE、AFTER_TRANSACTION和AFTER_STATEMENT。其中,ON_CLOSE模式在Session关闭时释放连接,AFTER_TRANSACTION在事务结束时释放,而AFTER_STATEMENT在每次执行SQL语句后释放。hibernate.connection.release_mode配置参数用于设定释放模式,并讨论了不同模式在JTA环境下的适用性。建议根据实际场景谨慎选择连接释放策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate2.x版本中,对于JDBC连接管理是Session在第一次需要的时候获取一个连接,在Session关闭之前一直会持有这个连接。Hibernate3引入了连接释放的概念,来告诉Session如何处理它的JDBC连接。可以通过org.hibernate.ConnectionReleaseMode的不同枚举值来使用不用的释放模式:

u       ON_CLOSE Hibernate Session在第一次需要进行JDBC操作的时候获取连接,然后持有它,直到Session关闭。

u       AFTER_TRANSACTION org.hibernate.Transaction结束后释放连接。

u       AFTER_STATEMENT 在每一条语句被执行后就释放连接。但假若语句留下了与Session相关的资源,那就不会被释放。目前唯一的这种情形就是使用org.hibernate.ScrollableResults

hibernate.connection.release_mode配置参数用来指定使用哪一种释放模式。可选的值有:

u       auto(默认):这一选择把释放模式委派给

org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()方法。对JTATransactionFactory来说,它会返回ConnectionReleaseMode.AFTER_STATEMENT; JDBCTransactionFactory,则是ConnectionReleaseMode.AFTER_TRANSACTION

u       on_close 使用 ConnectionReleaseMode.ON_CLOSE。这种方式是为了向下兼容的,但是已经完全不被鼓励使用了。

u       after_transaction:使用ConnectionReleaseMode.AFTER_TRANSACTION。这一设置不应该在JTA环境下使用。需要注意的是使用 ConnectionReleaseMode.AFTER_TRANSACTION的时候,假若Session 处于auto-commit状态,连接会像AFTER_STATEMENT那样被释放。

u       after_statement:使用ConnectionReleaseMode.AFTER_STATEMENT。除此之外,会查询配置的ConnectionProvider,是否它支持这一设置。假若不支持,释放模式会被设置为ConnectionReleaseMode.AFTER_TRANSACTION。只有在每次调用ConnectionProvider.getConnection()获取底层JDBC连接的时候,都可以确信获得同一个连接的时候,这一设置才是安全的;或者在auto-commit环境中,可以不管是否每次都获得同一个连接的时候,这才是安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值