同一个表中PKEY和FKEY案例的java问题
我有一个表,其中一个字段ID作为主键,另一个字段PID作为ID字段的外键。两者都是长数据类型
这是我的表结构
CREATE TABLE `myobj` (
`ID` BIGINT(100) NOT NULL AUTO_INCREMENT,
`FRIENDLY_NAME` VARCHAR(100) DEFAULT NULL,
`PARENT_ID` BIGINT(100) DEFAULT NULL,
`PARENT` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `PARENT_ID` (`PARENT_ID`),
CONSTRAINT `myobj_ibfk_1` FOREIGN KEY (`PARENT_ID`) REFERENCES `myobj` (`ID`) ON DELETE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
我使用Hibernate作为ORM插入MySQL数据库。问题是
当一个或多个记录将是顶级且没有父id时,插入顶级记录时出错。在没有父id的情况下,它看起来像 它将只接受NULL
但从Java应用程序代码的角度来看,数据类型很长,因此当我通过Hibernate插入一个默认值为0的对象时,它看起来像是违反了约束
Cannot add or update a child row: a foreign key constraint fails (
genericdb
.myobj
, CONSTRAINTmyobj_ibfk_1
FOREIGN KEY (PARENT_ID
) REFERENCESmyobj
(ID
) ON DELETE CASCADE)
通过sql CLI将0设置为值时也会出现此问题
第二次会议:
还尝试将父\u ID的默认值设置为0
CREATE TABLE `myobj` (
`ID` BIGINT(100) NOT NULL AUTO_INCREMENT,
`FRIENDLY_NAME` VARCHAR(100) DEFAULT NULL,
`PARENT_ID` BIGINT(100) DEFAULT '0',
`PARENT` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `PARENT_ID` (`PARENT_ID`),
CONSTRAINT `myobj_ibfk_1` FOREIGN KEY (`PARENT_ID`) REFERENCES `myobj` (`ID`) ON DELETE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
所以,当我将0插入到Parent_ID字段中时,仍然存在错误
Cannot add or update a child row: a foreign key constraint fails (
genericdb
.myobj
, CONSTRAINTmyobj_ibfk_1
FOREIGN KEY (PARENT_ID
) REFERENCESmyobj
(ID
) ON DELETE CASCADE)
如果这里有什么问题,请告诉我
# 1 楼答案
问题是,您试图指向myobj中id为0的行,但该行不存在。该列的默认值应为null
我很确定如果你运行
select * from myobj where id = 0
,你不会得到任何结果