是否可以将DataSourceTransactionManager用于ORM持久性而不是HibernateTransactionManager?

Dav*_*tor 8 spring hibernate transactions

我正在调试我们的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文档中.

第11.9节"常见问题的解决方案".

根据您选择的事务技术和要求,使用正确的PlatformTransactionManager实现.

Mik*_*e Q 6

这会让我觉得错误并会引发问题.如果没有hibernate txn管理器,对HibernateOperations的所有调用都将在事务外部和单独的会话中进行,可能使用自动提交.因此,当发生错误时,似乎一切都很好,您可能会发现您希望回滚的更改不会.

请尝试以下方法进行检查

  • 开始转
  • 保存一些东西
  • 抛出异常
  • 承诺

检查数据库中是否出现"某事".

另一项检查是

  • 开始转
  • 加载东西
  • 从某事物访问与另一个对象的关系并访问该相关对象的属性(而不是pk)

您可能会发现最后一次调用导致异常,因为会话未从加载中保持打开状态,因为封闭的txn不是由hibernate txn管理器管理的.

  • 好一个.我试过这个测试.保存后发生异常,使用Hibernate tx mgr,保存被回滚.使用DataSourceTransactionManager它不是. (4认同)