赞
踩
在做java spring boot课设的时候,因为涉及到多张表,所以难以避免会有外键约束。而且通常发生在使用delete方法时候出现。报以下的错误
其实解决方法很简单,只需要重写你的delete方法即可
controller
(这里我在最上方加上了@RequestMapping("/admin/category/"))
- @RequestMapping("delete")
- public String delete(Integer id) {
- categoryService.ifdelete(id);
- // categoryService.delete(id);//原先的delete方法会导致外键约束的方法
- return "redirect:/admin/category/list";
- }
servicelmpl
(service这里就不给出代码了,只是些方法的定义)
- @Override
- public int delete(Integer id) {
- return categoryDao.deleteById(id);
- }//这里是一开始的delete
-
- @Override
- public Category ifdelete(Integer id) {
- return categoryDao.ifdelete(id);
- }
- }
Dao
(这里实现对数据库的查询sql,可以看到,原先的delete(这里用的是接口BaseMappe里面的delete方法)并没有考虑到外键约束,所以我自己写了一个ifdelete方法,当要删除的时候这,个SQL语句的目的是从tab_category
表中删除那些在tab_route
表中没有的记录,这样就完美解决了外键约束的方法)
- @Mapper
- public interface CategoryDao extends BaseMapper<Category> {
-
- @Select("SELECT cname,cid FROM tab_category WHERE cid=#{id}")
- public Category findById(Integer id);
-
- @Select("DELETE FROM tab_category WHERE cid NOT IN (SELECT cid FROM tab_route);")
- public Category ifdelete(Integer cid);
- }
还有实现类
- @Data
- @TableName("tab_category")
- public class Category implements Serializable {
-
- @TableId(type = IdType.AUTO)
- private Integer cid;//分类id
- private String cname;//分类名称
-
- }
- @Data
- @TableName("tab_route")
- public class Route implements Serializable {
-
- @TableId(type = IdType.AUTO)
- private Integer rid;//线路id,必输
- private String rname;//线路名称,必输
- private Double price;//价格,必输
- private String routeIntroduce;//线路介绍
- private String rflag; //是否上架,必输,0代表没有上架,1代表是上架
- private String rdate; //上架时间
- private String isThemeTour;//是否主题旅游,必输,0代表不是,1代表是
- private Integer count;//收藏数量
- private Integer cid;//所属分类,必输
- private String rimage;//缩略图
- private Integer sid;//所属商家
- private String sourceId;//抓取数据的来源id
-
- @TableField(exist = false)
- private Category category;//所属分类 使用resultmap的assocation处理
- @TableField(exist = false)
- private Seller seller;//所属商家 使用resultmap的assocation处理
- @TableField(exist = false)
- private List<RouteImg> routeImgList;//商品详情图片列表,关联属性,mybatis plus不能查,需要配置resultmap使用resultmap的collection处理
-
- }
上述方法对jpa和mybatis以及mybatis plus均适用
不过值得一提的是,这个在实现删除的操作的时候,是没有任何提示的,当然可以自己写一个重定向的前端页面。我一开始考虑的是用ajax来进行数据的传输,这样也可以在上方给出一些提示,但是过程有些小复杂,而且我对ajax也不熟悉,于是乎放弃。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。