【问题标题】:Sharing a Spring transaction between hibernate & JdbcTemplate within a AbstractTransactionalTestNGSpringContextTests在 AbstractTransactionalTestNGSpringContextTests 中的 hibernate 和 JdbcTemplate 之间共享 Spring 事务
【发布时间】:2010-09-14 09:29:38
【问题描述】:

我正在AbstractTransactionalTestNGSpringContextTests 的子类中运行测试,我在其中通过部分 Spring 上下文执行测试。每个测试都在一个事务中运行,最后会回滚以保持数据库不变。

一个测试通过 Hibernate 写入数据库,而另一个测试使用 JdbcTemplate 从同一个数据库读取,两者共享同一个数据源。

我发现通过 JdbcTemplate 查询时看不到休眠更新。这确实有些道理,因为每个人都可能从连接池中获取自己的连接,因此在自己的事务中运行。

我已经看到有迹象表明可以让两者共享连接和事务,但我不清楚设置它的最佳方式,尤其是在连接工厂的参与下。所有这些组件都被声明为 Spring bean。谁能给我指点?

编辑:

好吧,我实际上阅读了一些文档并遇到了麻烦,HibernateTransactionManager 类指出这绝对是可能的:“这个事务管理器适用于使用单个 Hibernate SessionFactory 进行事务数据访问的应用程序,但它还支持事务中的直接数据源访问(即使用相同数据源的纯 JDBC 代码)..."。

唯一的要求似乎是设置数据源属性,否则不需要。尽管如此,在提交事务之前,我仍然没有看到共享的更改。如果我得到它的工作,我会更新。

【问题讨论】:

  • 据我所知,JTA事务可以跨连接,而jdbc事务只能支持1个连接,所以如果你说的不起作用,你可以检查事务管理器配置。

标签: java hibernate spring


【解决方案1】:

写入的 Spring bean 必须刷新其更改,以便读取的 bean 看到它们。

【讨论】:

  • 谢谢 - 我已经在保存后刷新 (sessionFactory.getCurrentSession().saveOrUpdate(instance); sessionFactory.getCurrentSession().flush();)。那是行不通的。我想你认为它应该工作,那么?
猜你喜欢
  • 2018-09-15
  • 2011-10-10
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2013-02-01
  • 2021-05-24
相关资源
最近更新 更多