spring, hibernate, transacation,

2019-04-09  本文已影响0人  天黑请闭眼

存在问题的代码如下:

    @Transactional(rollbackFor = Throwable.class)
    public void methodA() {
        A a = new A(1,"new");
        save(A);
        new Thread(()-> {
           A a = getA();
           a.setName("update");
           save(A);
            });
        }
       public A getA() {
           get A by hibernate;
           return A;
        }
}

问题:

  1. getA()获取到的对象A可能为空。因为事务需要等整个方法执行结束后提交。而getA()是异步执行,所有可能save(A)还没提交的情况下,getA()已经执行结束。所以在异步a.setName("update");时存在空指针异常(NPE)。
上一篇 下一篇

猜你喜欢

热点阅读