我在调试我们的webapp。它被配置为在启动时创建一个DataSourceTransactionManager bean和一个HibernateTransactionManager bean。这不是有意的,而是由第三方依赖造成的。效果似乎是良性的。通过调试我看到的是,当我们通过基于Hibernate的DAO持久对象时 - 调用DataSourceTransactionManager而不是HibernateTransactionManager(这两个bean都称为“transactionManager”)。 Spring Javadoc意味着(我认为,现在重新阅读它)这对当地资源来说很好 - 这就是我们的情况。即它不是基于分布式JTA的环境。使用DataSourceTransactionManager进行ORM持久化而不是HibernateTransactionManager可以吗?
我的问题是 - 没有使用HibernateTransactionManager进行基于ORM的持久性的任何负面影响。我可以更改配置,使HibernateTransactionManager通过我们的DAO上@Transactional注释的限定符来使用。
事情在简单的单元测试,集成测试设置中工作正常,但是当我们有成千上万的用户和高水平的并发时,我更关心扩展到完整的产量。
TIA, 希望这不是太晦涩。
Spring 3.0.x顺便说一句。
这是在Spring 3.1文档。
Sec 11.9“解决常见问题”。
根据您选择的交易技术和要求,使用正确的PlatformTransactionManager实施。
+1嗯。有趣。谢谢。将尝试其中一项测试。我所看到的是DAO调用发生在事务中,并且DAO调用getSession() - 所以Spring SessionFactoryUtils返回一个新的会话,并且一切似乎都很好。但正如你所说 - 我们多久会记得休息回滚。 –
不错的一个。我试过这个测试。保存后引发异常,Hibernate tx mgr保存被回滚。使用DataSourceTransactionManager它不是。 –
您能否提供支持您的单词的官方文档“如果没有hibernate txn管理器,所有对HibernateOperations的调用都将在事务之外并在单独的会话中”?我正在使用DataSourceTransactionManager + Hibernate。 – DerekY