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/ http://dotnetchris.wordpress.com/2009/01/27/conversation-per-business-transaction-using-postsharp-and-ioc/),使用“OnClose”会占用不必要的资源,因为在提交事务时您没有释放到连接池的连接。默认的“after_transaction”释放模式将在提交事务时释放您的连接,从而释放您宝贵的数据库连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)