想请教下事务回滚的问题

来源:8-6 商品添加之前端实现下

神奇大樱桃

2019-08-20

在进行前端和controller联调的时候,发现在controller层中addProduct时抛出了事务的错误。但是在serviceimpl里面,已经完成了对图片的存储,在往product表里插数据时因为我少赋值了个notnull字段所以报错,
int effectNum = productDao.insertProduct(product);
if (effectNum <= 0) {
throw new ProductOperationException(“创建商品失败”);
}
} catch (Exception e) {
e.printStackTrace();
throw new ProductOperationException(“创建商品失败:” + e.toString());
}
在这里接住了Exception e并且抛出了ProductOperationException。可是上面已经addThumbnail(product, thumbnail)了,而且addThumbnail里并没有事务回滚,所以导致了图片存储起来了,但是数据库里没有数据,并且图片也没有删除。所以我想问老师两个问题:1,事务回滚的范围,是只作用在try里吗,就是try里的时都白做。那如果这样的话那么多try,其中一个try失败也只回滚了一小部分,那之前的不也得回滚吗,为什么不直接在最外面try一个包住所有的呢。2.老师是否会在后面的课程加入插入失败后连同图片一起删除的内容呢?

写回答

1回答

翔仔

2019-08-20

同学好,事务回滚并不是只回滚try的,但是这里主要是对数据库事务的管理,因此只会回滚数据库,文件的持久化由于不是Spring管理的因此需要自己写,我们这里没有加入成功加入图片之后后续操作失败删除图片的逻辑,同学可以在addShop service里面的大catch下面实现对文件的删除:)

1
1
神奇大樱桃
非常感谢!
2019-08-21
共1条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程