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