hibernate文档说明如下:
配置参数hibernate.connection.release_mode用于指定要使用的发布模式.可能的值:*auto(默认值) - 相当于当前版本中的after_transaction.由于此设置的值导致的失败往往表示用户代码中的错误和/或无效假设,因此更改此默认行为并不是一个好主意.*on_close - 表示使用ConnectionReleaseMode.OnClose.此设置留待向后兼容,但强烈建议不要使用它....
我创建了一个集成测试,它通过同时打开两个会话并操纵同一个实体来激发StaleObjectException.为确保测试在完成后回滚所有内容,测试内容将放在TransactionScope中; 这会导致分布式事务启动,因为两个会话将针对同一环境事务打开数据库连接.我想将默认的ConnectionReleaseMode设置更改为"OnClose",但如上所述,文档不建议这样做.任何人都可以解释为什么改变默认行为不是一个好主意?
好吧,因为没有其他人在困扰我会尝试自己回答:-)如果您使用的模式在会话处理时提交事务(一个事务=一个会话)您也可以使用"OnClose"释放模式.如果您使用会话跨越多个事务的模式(例如,每个业务事务的对话http://dotnetchris.wordpress.com/2009/01/27/conversation-per-business-transaction-using-postsharp-and-ioc/)使用"OnClose"会占用不必要的资源,因为在提交事务时,您没有释放连接池的连接.默认的"after_transaction"释放模式将在提交事务时释放您的连接,从而释放您宝贵的数据库连接.
| 归档时间: |
|
| 查看次数: |
3630 次 |
| 最近记录: |