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