【问题标题】:Problem with a Case of PKEY AND FKEY within the same table同一张表中 PKEY AND FKEY 的问题
【发布时间】: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) 删除级联)

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

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多