【发布时间】:2010-09-14 09:29:38
【问题描述】:
我正在AbstractTransactionalTestNGSpringContextTests 的子类中运行测试,我在其中通过部分 Spring 上下文执行测试。每个测试都在一个事务中运行,最后会回滚以保持数据库不变。
一个测试通过 Hibernate 写入数据库,而另一个测试使用 JdbcTemplate 从同一个数据库读取,两者共享同一个数据源。
我发现通过 JdbcTemplate 查询时看不到休眠更新。这确实有些道理,因为每个人都可能从连接池中获取自己的连接,因此在自己的事务中运行。
我已经看到有迹象表明可以让两者共享连接和事务,但我不清楚设置它的最佳方式,尤其是在连接工厂的参与下。所有这些组件都被声明为 Spring bean。谁能给我指点?
编辑:
好吧,我实际上阅读了一些文档并遇到了麻烦,HibernateTransactionManager 类指出这绝对是可能的:“这个事务管理器适用于使用单个 Hibernate SessionFactory 进行事务数据访问的应用程序,但它还支持事务中的直接数据源访问(即使用相同数据源的纯 JDBC 代码)..."。
唯一的要求似乎是设置数据源属性,否则不需要。尽管如此,在提交事务之前,我仍然没有看到共享的更改。如果我得到它的工作,我会更新。
【问题讨论】:
-
据我所知,JTA事务可以跨连接,而jdbc事务只能支持1个连接,所以如果你说的不起作用,你可以检查事务管理器配置。