【发布时间】:2011-07-07 09:13:20
【问题描述】:
我有一个表,其中一个字段 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 的对象时,它看起来像是违反约束
无法添加或更新子行:a 外键约束失败 (
genericdb.myobj, 约束myobj_ibfk_1外键 (PARENT_ID) 参考资料myobj(ID) 删除级联)
通过 sql CLI 将值设置为 0 时也会出现此问题。
第二个场景:
还尝试将 PARENT_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
所以当我在 Parent_ID 字段中插入 0 时,仍然是错误
无法添加或更新子行:a 外键约束失败 (
genericdb.myobj, 约束myobj_ibfk_1外键 (PARENT_ID) 参考资料myobj(ID) 删除级联)
如果这里有什么问题,请告诉我。
【问题讨论】: