spring + hibernate 脏读数据问题,跪求各路高手给个答案
直接上代码。
ClassA{
updateA(){
updateAthao()
// 调用B的save
ClassB.saveB();
// 调用C的save
ClassC.saveC();
}
updateAthao(){
// 修改表数据
}
}
ClassB{
saveB(){
// 其它修改操作
for (){
查询表B
修改表B
}
}
}
ClassC{
saveC(){
throw Exception();
}
}
action类调用ClassA.saveA()。
ClassB.saveB多次查询并修改表B的数据。
当ClassC.saveC()抛出异常时,ClassA.updateAthao()中修改的数据全部回滚。
ClassB.saveB()中只有循环中最后一次修改的数据回滚,其它全部提交
经过调试后发现这是因为hibernate为避免出现脏数据,所以在查询后修改数据再查询同一表的数据时会将之前的事务全部提交。
有一个办法可以解决就是查询不在循环中进行,只要先查询后修改,就不会有问题。
但是这个方法不太好,有没有办法让循环中的操作也和其它修改一样和ClassA中的操作一起回滚呢。