今天用spring+hibernate做项目的时候,测试事务是否起作用的时候,
发现了一个问题,我在service层,同时更新两张表。
第一张表的dao层更新方法正常更新,
第二张表的dao层故意让其抛异常。
代码如下:
service层:
@Transaction
public void saveInfo(Flight flight,Passenger passenger){
flightDao.save(flight);
passengerDao.save(passenger);
}
flight的dao层:
public void save(Flight flight){
save(flight);
}
passenger的dao层:
public void save(Passenger passenger){
svae(passenger);
throw new Exception("出异常了,应该回滚");
}
按理说passenger的dao层出异常之后,事务应该回滚,但是真实的情况是没有。
两条数据正常插入。
最后通过网上查询资料发现:
spirng管理的事务,只有出现RuntimeException异常才会回滚。
将Exception改成RuntimeException后,两条数据都没有插入,事务起作用了。