我正在调试我们的webapp。它被配置为在启动时创建一个DataSourceTransactionManager bean以及一个HibernateTransactionManager bean。这不是故意的,而是由第三方依赖引起的。效果似乎是良性的。我通过调试看到的是,当我们通过基于Hibernate的DAO持久化对象时,将调用DataSourceTransactionManager而不是HibernateTransactionManager(两个bean都称为“ transactionManager”)。Spring Javadoc暗示(我认为,现在重新阅读)对本地资源来说很好- 这就是我们的情况。也就是说,它不是基于JTA的分布式环境。
我的问题是- 对基于ORM的持久性不使用HibernateTransactionManager是否有负面影响?我可以更改配置,以通过DAO上@Transactional批注上的限定符来使用HibernateTransactionManager。
在简单的单元测试,集成测试设置中,一切工作都很好,但是当我们有成千上万的用户和高度的并发性时,我更担心要扩展到完整的生产量。
TIA,希望不要太晦涩。
Spring 3.0.x BTW。
这是在Spring 3.1文档中。
第11.9节“常见问题的解决方案”。 根据您对事务技术和需求的选择,使用正确的PlatformTransactionManager实现。
第11.9节“常见问题的解决方案”。
根据您对事务技术和需求的选择,使用正确的PlatformTransactionManager实现。
这将使我感到错误,并会引起问题。如果没有hibernate的txn管理器,则对HibernateOperations的所有调用都将在事务外部并在单独的会话中进行,可能使用自动提交。因此,当发生错误时,一切似乎都很好,您可能会发现并没有希望回滚的更改。
尝试以下检查
检查“内容”是否出现在数据库中。
另一张支票是
您可能会发现最后一次调用会导致异常,因为会话没有从负载中保持打开状态,因为封闭的txn不受hibernatetxn管理器的管理。