Проблема в случае PKEY и FKEY в одной таблице - PullRequest
0 голосов
/ 02 марта 2011

У меня есть таблица с идентификатором поля в качестве первичного ключа и PID другого поля в качестве внешнего ключа для поля идентификатора. Оба имеют длинные типы данных.

Итак, это моя структура таблицы

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. Проблема в

Когда одна или несколько записей, которые будут верхнего уровня без родительского идентификатора, происходит ошибка с вставкой записей верхнего уровня. Похоже, в случае отсутствия родительского идентификатора он будет принимать только NULL.

Но с точки зрения кода Java-приложения тип данных является длинным, и, следовательно, когда я вставляю объект через Hibernate со значением по умолчанию, равным 0, это выглядит как нарушение ограничения

Невозможно добавить или обновить дочернюю строку: a ограничение внешнего ключа не выполнено (genericdb. myobj, ОГРАНИЧЕНИЕ myobj_ibfk_1 иностранный ключ (PARENT_ID) ССЫЛКИ myobj (ID) НА УДАЛЕННОМ КАСКАДЕ)

Эта проблема возникает также при установке 0 в качестве значения через CLI CLI.

Второй секнарио:

Также попытался установить значение по умолчанию для 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

ТАК, когда я вставляю 0 в поле Parent_ID, ошибка все равно

Невозможно добавить или обновить дочернюю строку: a ограничение внешнего ключа не выполнено (genericdb. myobj, ОГРАНИЧЕНИЕ myobj_ibfk_1 иностранный ключ (PARENT_ID) ССЫЛКИ myobj (ID) НА УДАЛЕННОМ КАСКАДЕ)

Пожалуйста, дайте мне знать, если что-то здесь не так.

1 Ответ

0 голосов
/ 02 марта 2011

Проблема в том, что вы пытаетесь указать на строку в myobj с идентификатором 0 , который не существует.Значение по умолчанию для этого столбца должно быть нулевым.

Я совершенно уверен, что если вы запустите select * from myobj where id = 0, вы не получите никаких результатов обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...