如何使存储过程中的查询知道Spring Transaction?

时间:2012-07-24 07:47:03

标签: mysql spring transactions spring-transactions

在数据库上执行一堆查询之后,我正在从Spring Transaction(一个标有@Transactional的Spring Service)调用存储过程。

entityManager.createNativeQuery("call stored_procedure()");
query.executeUpdate();

为了在java代码抛出异常时(或者由于存储过程中抛出异常而回滚的javacode中的数据库修改),使存储过程的查询回滚,我是将mysql服务器的autocommit变量设置为false。 这解决了我的部分问题。我现在拥有数据库事务的所有代码。我的问题是存储过程的查询不知道在java代码中进行的修改(对DB)。即从存储过程中选择的值将在Spring事务开始之前读取数据库中的值。

我的问题是(标题中陈述的那个)如何在存储过程中查询在调用存储过程之前对Spring中的数据库进行的修改(来自该事务)?

不幸的是,将DB设置为脏读不是我现在的选择。 是否可以获取Spring在mysql上打开的事务的ID,并在该事务中运行存储过程的查询?

由于

1 个答案:

答案 0 :(得分:1)

事实证明,我需要在Entity Manager上调用flush,以便将持久化上下文与底层数据库同步。我还从SP中删除了任何事务管理指令,它按预期工作;存储过程中的查询现在是Spring管理的事务的一部分。

相关问题