怀柔 做网站的,wordpress 标签云制作,公司网站制作申请报告,网站开发环境是什么意思前言 寒假接手一个项目#xff0c;甲方提出了这样一个功能——需要一个商品有多张图片。可以进行滑动观看。这个需求很简单#xff0c;前端只要做一个轮播图#xff0c;后端只要涉及一个商品下有多组照片即可#xff08;一对多关系#xff09;。 项目后端选型 框架springb…前言 寒假接手一个项目甲方提出了这样一个功能——需要一个商品有多张图片。可以进行滑动观看。这个需求很简单前端只要做一个轮播图后端只要涉及一个商品下有多组照片即可一对多关系。 项目后端选型 框架springboot 数据库框架springDataJpa 想要了解什么springDataJpa可以看这篇文章 bug重现
甲方在后台图片进行图片拖动改变位置点击进行修改按钮该商品拖动改变位置的图片依旧没有发生变化。根据排查前端发过来请求参数确实改变了图片的位置。因此只能是后端背锅啦 可以给大家看看之前我写的前一版的代码update方法 PostMapping(/updateModel)ApiOperation(value 更新型号, notes 更新型号信息)public String updateModel(RequestBody Model model) throws Exception {// 获取目标型号Model byModelId modelService.findByModelId(model.getModelId());ListImage targetImgs byModelId.getImgs();if (byModelId null) {throw new Exception(noModel);}if (targetImgs ! null) {ListImage imgs model.getImgs();if(!CollectionUtils.isEmpty(imgs)) {ListString url imgs.stream().map(Image::getUrl).collect(Collectors.toList());for (Image image : model.getImgs()) {url.add(image.getUrl());imageService.addImage(image);}int waterMark 1;// 改变了要用原图进行添加水印而不是用已经水印图进行再一次重复水印waterMark createWaterMarkWithRaw(model.getModelName(), url);if (waterMark ! 1) {throw new Exception(添加水印失败);}}}// 更新保存到数据库modelService.updateModel(model);return success;}我在网上苦苦搜寻都是关于对多端实体进行注解的添加而我这个项目的多端就是商品下多个图片List Image imgs OneToMany(fetchFetchType.EAGER,cascadeCascadeType.ALL,orphanRemoval true)private ListImage imgs;cascadeCascadeType.ALL,orphanRemoval true这两个说白了就是说进行级联操作会对对应的子实体也会进行相应的改变删除、插入等 然后并没有什么卵用我一直给干到一点中弥留之际我发现了问题的关键所在
解决方案
因为jpa的机制是可以通过注解OneMany将实体创建表也会创建关系表 在我这个项目就是Model 、Image和Model_img三张表。我在前面不断地测试插入发现Model_img表没有发生改变关联关系依旧是原来的“配对”。所以说明咱们得update方法并没有进行修改Model_img表里所维护的数据。 那么我们只要手动干预model_img表中的关系数据不就可以了吗。这样查出来就是修改后关系的数据了 提交后的代码 PostMapping(/updateModel)ApiOperation(value 更新型号, notes 更新型号信息)public String updateModel(RequestBody Model model) throws Exception {// 获取目标型号Model byModelId modelService.findByModelId(model.getModelId());if (byModelId null) {throw new Exception(noModel);}ListImage newImags new ArrayList();ListImage imgs model.getImgs();if(!CollectionUtils.isEmpty(imgs)) {ListString url imgs.stream().map(Image::getUrl).collect(Collectors.toList());for (Image image : model.getImgs()) {url.add(image.getUrl());imageService.addImage(image);Image newImage new Image();newImage.setUrl(image.getUrl());newImags.add(newImage);}int waterMark 1;// 改变了要用原图进行添加水印而不是用已经水印图进行再一次重复水印waterMark createWaterMarkWithRaw(model.getModelName(), url);if (waterMark ! 1) {throw new Exception(添加水印失败);}}// 清理原先数据model.getImgs().clear();// 添加修改位置的图片数据model.getImgs().addAll(newImags);modelService.updateModel(model);return success;}ps:多端实体也是需要进行添加相应的注解即 OneToMany(fetchFetchType.EAGER,cascadeCascadeType.ALL,orphanRemoval true)private ListImage imgs;到此bug解决时间终止为1点半赚钱不易【叹气】