在数据库上执行了一堆查询之后,我从 Spring Transaction(一个标有 @Transactional 的 Spring Service)调用了一个存储过程。
entityManager.createNativeQuery("call stored_procedure()");
query.executeUpdate();
为了在java代码抛出异常时使存储过程的查询回滚(或者由于存储过程中抛出异常而回滚javacode中对数据库的修改),我设置了自动提交mysql服务器的变量为false。这解决了我的部分问题。我现在拥有数据库事务的所有代码。我的问题是存储过程的查询不知道在 java 代码中所做的修改(对 DB)。即存储过程中的选择读取在 Spring 事务开始之前数据库中的值。
我的问题是(标题中所述的问题)如何使存储过程中的查询知道在调用存储过程(从该事务)之前对 Spring Transaction 中的数据库所做的修改?
不幸的是,现在将数据库设置为脏读不是我的选择。是否可以获取 Spring 在 mysql 上打开的事务的 ID,并在该事务中运行存储过程的查询?
谢谢