黑马程序员技术交流社区

标题: Spring 事务不回滚的解决办法 [打印本页]

作者: cunbai    时间: 2015-5-23 13:06
标题: Spring 事务不回滚的解决办法
Spring 事务不回滚的问题关键是:不能对该异常用try...catch处理,否则不会回滚事务! 还有几种可能:
表不支持支持事务,mysql下必须为InnoDB

mysql为绿色版的缘故,改装正式版试试

待补充。。

Java代码  
@Service("systemConfigService")  

public class SystemConfigServiceImpl extends AbstractGenericService<SystemConfig> implements SystemConfigService {  

      

    @Resource(name="systemConfigDAO")  

    private SystemConfigDAO systemConfigDAO;      

      

    @Override  

    public void deleteByIds(String id) {  

        if(id != null){  

            String[] ids = id.split(",");  

            try {  

                SystemConfig systemConfig = systemConfigDAO.get(2);  

                systemConfig.setValue("测试值");  

                systemConfigDAO.update(systemConfig);  

                  

                // 执行如下操作,数据库将报唯一索引重复问题  

                // Caused by: java.sql.BatchUpdateException: Duplicate entry 'PORTAL.CITYCODE' for key 'name'  

                SystemConfig systemConfig2 = systemConfigDAO.get(2);  

                systemConfig2.setName("PORTAL.CITYCODE");  

                systemConfigDAO.update(systemConfig2);  

            }   

            catch (Exception e) {  

                log.error(e);  

                // 如果注释掉throw new RuntimeException,那么事务将不能回滚,因为spring捕捉不到Exception  

                // 解决办法,去掉try catch,或者在cache中抛出异常以便spring捕获  

                throw new RuntimeException("运行时出错!");   

            }  

        }  

    }  

}  





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2