java spring 面试题 找错

大神们帮忙,去了滴答拼车给的面试题,小弟我愣是没看懂,求解惑。

如下代码用spring管理,请说出代码是否有问题,如果有错请指出并修改。

 classTestDao(){
    public void doUpdate(){
        try{
            update table1;//一个更新操作,无需关注语法
            update table2;//一个更新操作,无需关注语法
            insert history;//一个插入操作,无需关注语法
        }catch(Exception e){
            logger.error(e.getMessage());
        }
    }
}

Class Test Service(){
    @AutoWire
    TestDao testDao;
    @Transactional ( readOnly = false , rollbackFor = Exception.class)
    public void doUpdate(){
        try{
            testDao.doUpdate();
        }catch(Exception e){
            logger.error(e.getMessage());
        }
    }
}

问题1:Service的doUpdate方法配置为在接收到Exception类的异常时会执行回滚操作,但从代码看,TestDao和Service的doUpdate方法都不会抛出异常,所以内部异常时,spring没有感知,自然无法回滚。
问题2:代码中记录异常的方法不太好,只记录了异常名称,但丢弃了异常的栈,项目进行运营阶段后遇到问题可能不太好定位。

classTestDao(){ 这里 class TestDao(){
@Transactional ( readOnly = false , rollbackFor = Exception.class)这个应该写在TestDao类里吧

1、在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。
Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked
如果遇到checked意外就不回滚。
如何改变默认规则:
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。
2、
class TestDao()里面的 doUpdate()不应该放那么多方法
应该是每一个更新、插入的的操作都写一个方法。
然后在service层里来一一调用,
另外,最好把dao层和service层都加上自动注解,@repository和@service

所以你这里没有抛出异常啊throw Exception。所以事务不会回滚的!!!!!!!!!!

让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)