A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cunbai 中级黑马   /  2015-5-23 13:06  /  285 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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("运行时出错!");   

            }  

        }  

    }  

}  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马