存在问题的代码如下:
@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;
}
}
问题:
- getA()获取到的对象A可能为空。因为事务需要等整个方法执行结束后提交。而getA()是异步执行,所有可能save(A)还没提交的情况下,getA()已经执行结束。所以在异步a.setName("update");时存在空指针异常(NPE)。
网友评论