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