hibernate 删除 外键约束

问题描述

写了两个类: Subject(一端) Comment(多端)其对应hbm xml(截取)为:subject.hbm.xml: <set name="comments" lazy="true" inverse="true" cascade="all" sort="unsorted" > <cache usage="read-write" /> <key column="subjectid" /> <one-to-many class="com.module.Comment" /> </set>//***************************************comment.hbm.xml: <many-to-one name="subject" class="com.module.Subject" cascade="none" outer-join="auto" update="true" insert="true" column="subjectid" />问题:当删除subject时提示:- SQL Error: 1451, SQLState: 23000- Duplicate key or integrity constraint violation, message from server: "Cannot delete or update a parent row: a foreign key constraint fails (`lnc/t_comment`, CONSTRAINT `FKF437E194F69C747` FOREIGN KEY (`subjectid`) REFERENCES `t_subject` (`id`))"- Could not synchronize database state with sessionorg.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not delete: [com.module.Subject#32769]; SQL []; Duplicate key or integrity constraint violation, message from server: "Cannot delete or update a parent row: a foreign key constraint fails (`lnc/t_comment`, CONSTRAINT `FKF437E194F69C747` FOREIGN KEY (`subjectid`) REFERENCES `t_subject` (`id`))"; nested exception is java.sql.SQLException: Duplicate key or integrity constraint violation, message from server: "Cannot delete or update a parent row: a foreign key constraint fails (`lnc/t_comment`, CONSTRAINT `FKF437E194F69C747` FOREIGN KEY (`subjectid`) REFERENCES `t_subject` (`id`))"java.sql.SQLException: Duplicate key or integrity constraint violation, message from server: "Cannot delete or update a parent row: a foreign key constraint fails (`lnc/t_comment`, CONSTRAINT `FKF437E194F69C747` FOREIGN KEY (`subjectid`) REFERENCES `t_subject` (`id`))"at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1977)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1163)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1272)at com.mysql.jdbc.Connection.execSQL(Connection.java:2236)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1741)at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1588)at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22)at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:581)at net.sf.hibernate.impl.ScheduledDeletion.execute(ScheduledDeletion.java:29)at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2449)at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2435)at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2397)at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2261)请碰到过这个问题的朋友帮我看看(inverse="false" 时可以删除‘一端’,但我想把维护交给‘多端‘Comment)? 问题补充:mrliang 写道

解决方案

在删除subject时,因为你在<set>标签中有inverse="true"让<key>标签失效,这样在一端这方就不能准确获得外键信息,所以直接删除会报错,应该是要先解除关系之后再删除
解决方案二:
把你的删除代码贴上来看看
解决方案三:
你要删除的subject是一端而不是多端啊,当然会外键冲突了。
解决方案四:
维护就是要交给多的 一端

时间: 2024-09-15 16:51:36

hibernate 删除 外键约束的相关文章

sql server删除外键约束

  x先找出约束名字 然后删除它 我给个例子 --测试环境 --主表 create table test1(id int primary key not null,value int) insert test1 select 1,2 go --从表 create table test2(id int references test1(id),value int) go --第一步:找出test2表上的外键约束名字 --2000 exec sp_helpconstraint 'test2' --可

sql server中的外键约束

server sql server中建立外键约束有3中方式:1.Enterprise Manager中,Tables,Design Table,设置Table的properties,   可以建立constraint, reference key;2.Enterprise Manager中,Diagrams, new Diagrams,建立两个表的关系.3.直接用transact sql语句. 三个方法都需要先建立数据表.-- 创建表author :CREATE TABLE [dbo].[aut

mysql外键约束使用详解

MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbol]] FOREIGN KEY     [index_name] (index_col_name, ...)     REFERENCES tbl_name (index_col_name,...)     [ON DELETE reference_option]     [ON UPDATE reference_opt

详解MySQL中的外键约束问题_Mysql

使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

MySQL删除外键问题小结_Mysql

MySQL:MySQL不能删除外键,抱错Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152) 曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方. 例子如下: mysql> ALTER TABLE ruler.test2child DROP FOREIGN KEY test; ERROR 1025 : Error on rename of ''./ruler/test2child

讲解SQL与Oracle外键约束中的级联删除

最近软件系统中要删除一条记录,就要关联到同时删除好多张表,它们之间还存 在着约束关系.所以考虑到在创建表时加上约束关系,详细内容如下: SQL的外键约束可以实现级联删除与级联更新; ORACLE则只充许级联删除. SQL级联删除与级联更新使用格式: CREATE TABLE A001(ID INT PRIMARY KEY,NAME VARCHAR(20)) CREATE TABLE A002(ID INT REFERENCES A001(ID)ON DELETE CASCADE ON UPDAT

PostgreSQL 能否自定义外键约束,用来检查关联表的逻辑删除

问题描述 PostgreSQL 能否自定义外键约束,用来检查关联表的逻辑删除 商品表:create table goods(id serial primary keyname character varyingdelete_flag integer not null default 0);delete_flag=0表示正常的数据,delete_flag=1的表示被删除的数据.订单表:create table orders(id integergoods_id integer);能否在订单表添加外

MySQL数据库中的外键约束详解

使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. 在这种情况下,我们的数

mysql中关于外键约束的小问题

问题描述 mysql中关于外键约束的小问题 我想问,主表被references后不允许先删除记录,又说从表指定on delete cascade后删除主表记录时从表记录随之删除,你说这不矛盾吗?到底让不让删除? 例如下面这张图,student_table参考teacher_table,我却删不掉主表teacher_table 解决方案 嗯,这个问题已经解决啦,是我测试代码写错了,删除记录用del 我那个写成drop了 解决方案二: 你需要先解除外键约束 再删除表 解决方案三: MySQL外键约束