如何在spring框架环境中解决使用事务的问题?

时间:2017-11-14 14:16:27

标签: sql database spring spring-mvc spring-data

我分析了Spring框架源代码,但我还没理解为什么事务没有正常工作。

我发送了32个线程的请求数据包来调用buySth函数(通过控制器)。我认为插入选择查询在一个事务中工作,所以如果remainingMoney低于1000,那么插入作业将被停止,但结果完全不同。当reaminMoney为零时,插入作业没有停止。

为什么交易是这样的?我搜索了互联网找到原因,但我找不到它。你能给我一些建议吗?

我附上了以下部分代码。

1)ServiceImpl(使用@Transactional)

@Service ("testService")

public class testServiceImpl implements testService{

    ..........

   @Override

   @Transactional

   public void buySth(String id, int seq) throws Exception {

       ..........

       int result = sqlSession.insert("testMapper.insertTestSth", map);

   }

       ..............

2)映射文件(使用插入选择查询,但选择仅用于检查条件)

<insert id="insertTestSth" parameterType="java.util.HashMap">

   insert into dbo.TestSth (id, reductMoney, type, description)

   select #{id}, #{reductMoney}, #{type}, #{description} 

    where (

            select sum(nvl (initMoney, 0))-sum (nvl (reductMoney, 0)) as remainMoney 
              from dbo.TestSth where id = #{id}    

           ) > 1000

</insert>

3)Db默认隔离级别:Read committed

0 个答案:

没有答案