如何在一次事务中使用本机查询读取更改的值? (春天和JPA)

时间:2010-06-15 19:49:00

标签: spring jpa transactions commit

我们有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的更改?

1 个答案:

答案 0 :(得分:1)

我猜您在DataSourceJpaTransactionManagerJdbcTemplate使用相同的JpaTemplate,并使用此功能启用@Transactional

<tx:annotation-driven />

假设它不是配置错误,我最好的猜测是你从同一个类中的方法调用@Transactional方法?

在这种情况下,您需要在事务逻辑中编织AspectJ或重构代码,以便@Transactional方法在调用方法之外的另一个类中。 (重构选项是简单易用的选项)

如果这不能解决您的问题,您应该将相关的类与相关的日志消息一起添加到您的问题中。