在对数据库执行一堆查询之后,我从Spring Transaction(标有@Transactional的Spring服务)调用存储过程。如何使存储过程中的查询知道Spring事务?
entityManager.createNativeQuery("call stored_procedure()");
query.executeUpdate();
为了使存储过程回滚的查询时的异常是由Java代码引发(或DB在javacode所做的修改轧制因为在存储过程中引发的异常的背面) ,我已经将mysql服务器的autocommit变量设置为false。 这解决了我的问题的一部分。我现在拥有所有的DB事务处理代码。我的问题是存储过程的查询不知道在java代码中所做的修改(对数据库)。即来自存储过程的选择读取Spring事务开始之前DB中的值。
我的问题是(标题中指出的)如何使存储过程中的查询意识到在调用存储过程之前(来自该事务)在Spring事务中对DB进行的修改?
不幸的是,将数据库设置为脏读不是现在的选项。 是否可以获取Spring在mysql上打开的事务的ID,并在该事务中运行存储过程的查询?
感谢
您是否使用START TRANSACTION/COMMIT ROLLBAcK显式管理您的存储过程的事务? – gkamal 2012-07-24 10:20:50
不,我已经将autocommit设置为false,以便让Spring提交或回滚存储过程中的查询。这样可以回滚Spring和Stored Procedure中的查询。 – Romeo 2012-07-24 10:26:25