数据完整性约束错误

近期项目中又遇到了外键关联的问题。虽然之前的项目处理过类似错误,但是没有搞清楚是为什么报错,这此大概搞清楚了到底是什么情况。

情形:A类主键aId是B类外键bId,在数据库中设置了外键约束,删除时约束,更新时级联。程序中删除时报错org.hibernate.exception.ConstraintViolationException......这个错误违反数据库约束的时候就会报,现在只是报这个错误的一个情形。

在网上查询解决方法后发现,设置约束要么交给Hibernate管理,要么交给数据库管理,否则就会报错。交给Hibernate管理时,数据库不需要设置外键,设置映射文件中cascade属性如下一种:

   all: 所有情况下均进行关联操作,即save-update和delete。   none: 所有情况下均不进行关联操作。这是默认值。    save-update: 在执行save/update/saveOrUpdate时进行关联操作。    delete: 在执行delete 时进行关联操作。   all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点 然而现在我是要删除和更新分开处理,我就不会使用hibernate设置了,只好交给数据库管理,这时候程序中不处理就会报错。 首先,使用原生的SQL语句写删除方法,否则hibernate中肯定会打印错误的,另外在删除方法中catch到ConstraintViolationException,就可以进行自己想要的处理了。如:
try {
    System.out.println(findObjectById(id) +"...");
    getSession().delete(findObjectById(id));
} catch (Throwable e) {
    Throwable cause = e.getCause();
       if(cause instanceof ConstraintViolationException) {
               throw new SysException("111");
        }
}    

另外附上原生的删除方法:

public void delete2(Serializable id) throws SysException {
    CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MYSQL;
    String className = clazz.getSimpleName();
    String[] classId = Constant.Table_Entity_MAP.get(className).split("_");
    String sql = "DELETE FROM " + Constant.Table_Entity_MAP.get(className) +" WHERE " +classId[1]+"Id = ?";
    SQLQuery query = getSession().createSQLQuery(sql);
    query.setParameter(0,id);
    query.executeUpdate();
}
时间: 2024-10-24 07:44:46

数据完整性约束错误的相关文章

while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+……+n的结果, 否则输出“输入的数据有错误”。

import java.util.Scanner; /** * @author 蓝色以太 while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+--+n的结果, * 否则输出"输入的数据有错误". */ public class While2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("

Win8/8.1下驱动安装“数据无效”错误的有效解决方法

Windows8.1 安装完vmware 后并没有安装 vmnet1,vmnet8 这两个虚拟网卡,纠结了半天,原来是两个服务没打开. 如果你使用的是Windows8或者8.1,并且精简过系统,那么在安装驱动程序的过程中,你可能会遇到"数据无效"的错误.笔者确信所拥有的驱动程序是可以安装在Win8/Win8.1的系统中的,但是查阅了网络上关于所有安装驱动程序过程中出现"数据无效"的解决方法,都尝试无果,后来终于摸索出行之有效的解决方法--开启服务,屡试不爽. 原来,

第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html

第三百八十五节,Django+Xadmin打造上线标准的在线教育平台-登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入django自在的include逻辑 from django.contrib import admin from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin # 导入xadmin fr

mysql导入文件数据时错误: ERROR 29 (HY000): File 'xxx.txt' not found (Errcode: 13)

突然遇到mysql错误:ERROR 29 (HY000): File '/var/www/xiaoyou/static/upload/import/20130427105733.csv.txt' not found (Errcode: 13) 感觉特奇怪,因为程序在本地很ok,生气了语句如下: LOAD DATA INFILE '/var/www/upload/abc.csv.txt' INTO TABLE alumni_import FIELDS TERMINATED BY ',' OPTIO

冰点下载:数据解析错误

问题描述:数据解析错误 解决方案: 上图网址:https://tieba.baidu.com/p/5630852260?red_tag=0698642778 下载软件网址:http://www.bingdian001.com/?p=30 解压运行,效果如下:正常使用 原文地址:https://www.cnblogs.com/thebreakofdawn/p/9131628.html

实验六 索引和数据完整性约束

实验六索引和数据完整性约束 一.  实验内容: 1. 索引的创建 2. 数据完整性约束的创建 二.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary(员工薪水情况表). 三.  实验步骤:(要求用命令完成以下操作) 1. 使用create index创建索引: 1)       对Employees表中的员工编号列创建普通索引depart_index:

大数据常见错误

1.用./bin/spark-shell启动spark时遇到异常:java.net.BindException: Can't assign requested address: Service 'sparkDriver' failed after 16 retries! 解决方法:add export SPARK_LOCAL_IP="127.0.0.1" to spark-env.sh 2.java Kafka producer error:ERROR kafka.utils.Util

【oracle入门】数据完整性约束

数据的完整性约束是对数据描述的某种约束条件,关系型数据模型中可以有三类完整性约束:实体完整性.参照完整性和用户定义的完整性. 实体完整性Entity Integrity 一个基本关系通过对应显示世界的一个实体集.例如学生关系对应于学生的集体.现实世界中的实体是可区分的,即它们具有某一种唯一性标识.相应地,关系模式中以主码作为唯一标识符. 参照完整性 Referential Integrity 现实世界中打的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系描述的.这样就自然存在着

R读取数据的错误

使用R读取数据的时候遇到这种错误: invalid multibyte string at '<fd>' 解决方法就是: tbl <- read.delim("dir/file.txt", fileEncoding="UCS-2LE") Refhttp://stackoverflow.com/questions/4993837/r-invalid-multibyte-string?answertab=active#tab-top