一尘不染

可以将DataSourceTransactionManager用作ORM持久性而不使用HibernateTransactionManager吗?

hibernate

我正在调试我们的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实现。


阅读 459

收藏
2020-06-20

共1个答案

一尘不染

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

尝试以下检查

  • 开始翻译
  • 存点东西
  • 抛出异常
  • 承诺

检查“内容”是否出现在数据库中。

另一张支票是

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

您可能会发现最后一次调用会导致异常,因为会话没有从负载中保持打开状态,因为封闭的txn不受hibernatetxn管理器的管理。

2020-06-20