我们有Spring和JPA(Hibernate)的容器事务。我需要对表进行更新,以通过本机语句“标记”某些行。然后我们通过EntityManager从JPATemplate插入一些行到此表。之后,我们需要通过本机语句计算表中的更改(使用Oracle的union和minus,复杂组...)
我看到第1步和第2步的更改未提交,这就是为什么来自3的语句失败的原因。我已经尝试过事务传播REQUIRES_NEW,EntityManager.flush ......没有用。
1) update SOMETABLE acolumn = somevalue (native)
2) persist some values into SOMETABLE (via entity manager)
3) select values from SOMETABLE
是否有可能在步骤3中读取步骤1和2的更改?
答案 0 :(得分:1)
我猜您在DataSource
,JpaTransactionManager
和JdbcTemplate
使用相同的JpaTemplate
,并使用此功能启用@Transactional
:
<tx:annotation-driven />
假设它不是配置错误,我最好的猜测是你从同一个类中的方法调用@Transactional
方法?
在这种情况下,您需要在事务逻辑中编织AspectJ或重构代码,以便@Transactional
方法在调用方法之外的另一个类中。 (重构选项是简单易用的选项)
如果这不能解决您的问题,您应该将相关的类与相关的日志消息一起添加到您的问题中。