RuoYi框架中的数据完整性异常处理

news2024/9/30 8:22:27

案例:当你删除的表数据包含外键,关联其他表数据时。删除当前数据,会造成其他数据成为“孤儿”,可能会造成数据混乱。因此我们需要再MySQL中进行外键约束

 

具体的SQL语句:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_node
-- ----------------------------
DROP TABLE IF EXISTS `tb_node`;
CREATE TABLE `tb_node`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `region_id` int(11) NOT NULL COMMENT '区域Id',
  `partner_id` int(11) NOT NULL COMMENT '合作商Id',
  `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区域名称',
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
  `business_type` int(11) NULL DEFAULT NULL COMMENT '商圈类型',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `区域Id`(`region_id`) USING BTREE,
  INDEX `合作商Id`(`partner_id`) USING BTREE,
  CONSTRAINT `区域Id` FOREIGN KEY (`region_id`) REFERENCES `tb_region` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `合作商Id` FOREIGN KEY (`partner_id`) REFERENCES `tb_partner` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '点位表' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

 在ruoYi的前后端分离框架中,捕获异常:

package com.dkd.framework.web.exception;

import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingPathVariableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import com.dkd.common.constant.HttpStatus;
import com.dkd.common.core.domain.AjaxResult;
import com.dkd.common.exception.DemoModeException;
import com.dkd.common.exception.ServiceException;
import com.dkd.common.utils.StringUtils;

/**
 * 全局异常处理器
 * 
 * @author ruoyi
 */
@RestControllerAdvice
public class GlobalExceptionHandler
{
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 数据完整性异常
     */
    @ExceptionHandler(DataIntegrityViolationException.class)
    public AjaxResult handleDataIntegrityViolationException(DataIntegrityViolationException e)
    {
        log.error(e.getMessage(), e);
        if (StringUtils.containsIgnoreCase(e.getMessage(), "Duplicate entry"))
        {
            return AjaxResult.error("数据已存在");
        }
        if(StringUtils.containsIgnoreCase(e.getMessage(), "foreign")){
            return AjaxResult.error("无法删除,有其他数据引用!");
        }
        return AjaxResult.error("数据完整性异常,请检查数据是否完整");
    }
}

再次点击删除:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北京数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

随着北京数字孪生工业互联网可视化技术的深入应用,新型工业化智能制造工厂正逐步迈向智能化、高效化的全新阶段。这项技术不仅实现了物理工厂与数字世界的精准映射,更通过大数据分析、人工智能算法等先进手段,为生产流程优化、资源配置合理化…

xmind怎么把左边的主题换到右边

如图,样式——结构这里改变方向即可 附录:快捷键助手:CtrlShift/ 查看快捷键 1.常规 新建思维导图------------------CtrlN 打开--------------------------CtrlO 保存--------------------------CtrlS 另存为------------------------Ct…

Servlet 3.0新特征

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlServlet 3.0概述 Servlet 3.0规范是在2009年随着Java EE 6的发布而推出的。它引入了一系列新特性和改进,旨在简化Web应用的开发和部署过程,并提高Web应用的性能和可扩展性。Servlet 3.0的发布标…

科技赋能,商贸物流新速度 —— 智慧供应链商城加速企业成长

科技赋能,商贸物流新速度 —— 智慧供应链商城加速企业成长 随着科技的飞速发展,AI(人工智能)、大数据、物联网等先进技术正深刻重塑着商贸物流行业,推动其向更高效、更智能、更环保的方向迈进。这些技术的应用不仅提…

在MySQL中,要查询所有用户及其权限,您可以使用以下命令:

文章目录 1、查询所有用户1.1、登录数据库1.2、select user,host from mysql.user; 2、查看用户的权限 1、查询所有用户 1.1、登录数据库 [rootlocalhost ~]# docker exec -it spzx-mysql /bin/bash rootab66508d9441:/# mysql -uroot -p123456 mysql: [Warning] Using a pas…

详解mysql和消息队列数据一致性问题

目录 前言 保持系统数据同步(双写问题) 消息队列消息丢失的问题 总结 前言 在当今互联网飞速发展的时代,随着业务复杂性的不断增加,消息队列作为一种重要的技术手段,越来越多地被应用于各种场景。它们不仅能有效解…

CRUD 开发工具 NocoBase 与 Refine 对比

引言 今天我们来聚焦两款非常优秀的开源 CRUD 开发工具:NocoBase 和 Refine,它们分别是无代码/低代码开发平台和低代码前端开发框架的典型代表。 特别值得一提的是,NocoBase 截止目前已经在GitHub 上获得了 12k 的 Star。Refine 作为 Retool…

「OC」多线程的学习——NSThread

「OC」多线程的学习——NSThread 文章目录 「OC」多线程的学习——NSThread线程(process) 和 进程(thread) 的区别多线程NSThreadNSThread的创建NSThread的方法常见API线程状态控制方法 NSThread线程的状态 NSThread的多线程隐患售票窗口例子 synchronize关键字NSThread的线程通…

【保姆级教程】UMLS工具——MetaMap安装及使用

专家词典 https://lhncbc.nlm.nih.gov/LSG/Projects/lexicon/current/web/index.html SPECIALIST 词典是一个大型的生物医学和通用英语句法词典,旨在提供 SPECIALIST 自然语言处理系统 (NLP) 所需的词汇信息,其中包括 MetaMap 和词汇工具等。它旨在成为…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

软考论文《论大数据处理架构及其应用》精选试读

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

算法:按既定顺序创建目标数组

力扣1389 提示&#xff1a; 1 < nums.length, index.length < 100nums.length index.length0 < nums[i] < 1000 < index[i] < i 题解&#xff1a; class Solution {public int[] createTargetArray(int[] nums, int[] index) {int[] target new int[num…

The legacy JS API is deprecated and will be removed in Dart Sass 2.0

The legacy JS API is deprecated and will be removed in Dart Sass 2.0 更新了sass版本后&#xff0c;启动项目控制台一直在报错&#xff0c;影响开发效率&#xff0c;强迫症表示忍受不了。 字面意思是&#xff1a;Sass在2.0版本将会移除legacy JS API&#xff0c;所以现在使…

Python | Leetcode Python题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution:def numberOfArithmeticSlices(self, nums: List[int]) -> int:ans 0f [defaultdict(int) for _ in nums]for i, x in enumerate(nums):for j in range(i):d x - nums[j]cnt f[j][d]ans cntf[i][d] cnt 1return a…

Vue发送邮件攻略:从搭建到实现详细步骤?

vue发送邮件功能实现方法&#xff1f;Vue前端如何实现发送邮件&#xff1f; 随着应用功能的不断扩展&#xff0c;用户交互的复杂性也在增加。其中&#xff0c;发送邮件功能是许多Web应用中不可或缺的一部分。AokSend将详细介绍如何使用Vue.js实现发送邮件功能。 Vue发送邮件&…

fastadmin搜索刷新列表,怎么限制用户频繁点击?

文章目录 fastadmin搜索刷新列表&#xff0c;怎么限制用户频繁点击&#xff1f;解决方案fastadmin事件方法实现完结 fastadmin搜索刷新列表&#xff0c;怎么限制用户频繁点击&#xff1f; fastadmin目前有个很致命的问题&#xff0c;就是用户可以频繁的点击搜索等按钮&#xf…

基于SPRINTBOOT+VUE文献资料检索系统

文未可获取一份本项目的java源码和数据库参考。 1 选题背景 随着世界一体化和经济全球化席卷世界,越来越多的高校认识到&#xff0c;利用信息技术的发展来改变对文档、文献的运作方法和管理模式,提高高校的管理效益和生产效益&#xff0c;从而提高高校经济效益&#xff0c;增强…

大模型中的提示学习——情感预测示例项目

提示学习&#xff08;Prompting&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;中的训练技术&#xff0c;它利用预训练的语言模型&#xff08;如BERT、GPT等&#xff09;来解决各种下游任务&#xff0c;如文本分类、命名实体识别、问答等。这种方法的关键思想是通过…

智能红外抄表系统的设计与实现(论文+源码)_kaic

摘 要 随着我国现代社会经济的快速发展&#xff0c;工厂居民用电量剧增。人工抄表&#xff0c;费时费力&#xff0c;效率低下。人工抄表会造成漏抄、误抄、估抄等数据不准确。抄表人员可能与用电户合伙作弊&#xff0c;给资产管理者带来损失。在很多智能仪表的应用中需要现场人…

麦克纳姆轮

一、B站: 一、运动原理 保留前进,平移和自转的车轮方向箭头,把反向变成红色 二、运动公式 如果已知需要的前后、左右、自转量。如何指示每个车轮旋转,用数学的方法表示反转,就是用负数,以平面直角坐标系为参照,向前是正,向后是负,向右是正,向左是负,自转…