有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

同一个表中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, CONSTRAINT myobj_ibfk_1 FOREIGN KEY (PARENT_ID) REFERENCES myobj (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, CONSTRAINT myobj_ibfk_1 FOREIGN KEY (PARENT_ID) REFERENCES myobj (ID) ON DELETE CASCADE)

如果这里有什么问题,请告诉我


共 (1) 个答案

  1. # 1 楼答案

    问题是,您试图指向myobj中id为0的行,但该行不存在。该列的默认值应为null

    我很确定如果你运行select * from myobj where id = 0,你不会得到任何结果