如题,代码基本功能描述:接口A中有两个接口:B(接口)、C(接口)
接口B进行数据更新操作:通过person表中的id获取person,然后更新person.name的值
接口C查询更新的数据操作:通过更新后的name值,查询接口B更新的那条数据A接口使用了spring事务控制,C接口查询为空(查询不到B接口更新的数据),本人理解如果在一个事务里,也就是一个线程中,B接口没有到数据库,但是C接口也是可以查询到B接口更新的数据的!spring数据库事务管理

解决方案 »

  1.   

    调用C接口根本就不是事务 只是一个查询而已在调用完B接口后 立即提交 然后使用C来查询
      

  2.   

    这样会有查询不到的情况吗?因为配置了spring事务,这个应该是自动提交的吧?
      

  3.   

    这种延迟在程序中确实不好处理
    既然这样那你为什么C查询的时候 不根据id来查?
    有什么特殊的业务需求?
      

  4.   

    呵呵,我只是打个比方,Person 有三个属性,数据库对应三个字段:
    id name age 
    1   jack 20B接口更新数据后,变为:
    id name age
    1   leo  20现在C接口去查询数据name = 'leo'的person,这条刚刚更新的数据就是出不来,个人猜想可能是事务还没有提交到数据库造成的···起初想把更新和查询控制在一个事务,现在发现还是有同样的问题···
      

  5.   

    你在B执行完update和C之间打个debug 然后看下DB 个人感觉DB里面的记录应该是被更新过的了至于C查不到可能是因为查询的是缓存数据?
      

  6.   

    打断点数据就出来了,延迟也就那么1秒不到的时间,断点打在C,数据的已经更新到数据库的,我觉得还是提交到数据库延迟····
    但是用spring事务,将B、C放在一个事务却不能解决···
      

  7.   

    问题是出在提交延迟上面 跟事务没有关系 C不是一个事务boolean flag = b.update();
    if(flag)
    {
       c.query();
    }这样试试?
      

  8.   

    没有commit数据肯定就没有更新  当然查不到了假设C方法执行完后出现异常rollback了  那么读出来的数据不就变成脏数据了