有以下四种隔离级别
1.READ-UNCOMMITTED(读取未提交内容)级别
2.READ-COMMITTED(读取提交内容)级别
3.REPEATABLE-READ(可重读)级别
4.SERIERLIZED(串行化) 。如果在事务管理器中未设置事务隔离级别,就默认使用数据库的隔离级别,oracle为read_commit(读已提交)
public class test {
@Autowired
private Dao dao;
@Transactional(value = "thunderJpaTransactionManager", rollbackFor = Exception.class)
public boolean saveAndReadTest() {
User user = new User();
user.setId(1);
dao.save(user);
User user = dao.findById(1); //因为处于同一个事务中,所以是可以实时获取的
......
}
}
同一事务中,是可以读取未提交的数据
那么什么时候是不同的事务呢?
答:A线程调用saveAndReadTest()方法,B线程调用saveAndReadTest()方法,虽然调用的是相同的方法,但是事务是不同的,所以B线程中无法读取A中未提交的数据
我们可以通过dao.findById(1)获取到user对象,且这个对象不为null,如果此时去数据库中查询id为1的user用户,是查找不到的,因为在数据库中通过select * from User查询并非出于同一事务中