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

时间:2011-11-14 13:38:45

标签: hibernate spring 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文档中。

  

Sec 11.9“解决常见问题”。

     

使用正确的PlatformTransactionManager实现   您选择的交易技术和要求。

1 个答案:

答案 0 :(得分:6)

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

请尝试以下方法检查

  • begin tran
  • 保存一些东西
  • 抛出异常
  • 提交

检查数据库中是否出现“某事”。

另一项检查是

  • begin tran
  • 加载某些内容
  • 从某物访问另一个对象的关系并访问此相关对象的属性(而不是pk)

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

相关问题