#java #sql #database #hibernate #jsp
#java #sql #База данных #спящий режим #jsp
Вопрос:
у меня эта проблема :
Не удается добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (
bytecodete
.company_links
, ОГРАНИЧЕНИЕFK_company_links_1
ССЫЛОК НА ВНЕШНИЙ КЛЮЧ (id
)company
(idUser
) При КАСКАДНОМ УДАЛЕНИИ При КАСКАДНОМ ОБНОВЛЕНИИ)
Но я не совсем понимаю, что это происходит, поэтому я опубликую свои таблицы здесь:
//USER TABLE
DROP TABLE IF EXISTS `bytecodete`.`user`;
CREATE TABLE `bytecodete`.`user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`type` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
)
//COMPANY TABLE
DROP TABLE IF EXISTS `bytecodete`.`company`;
CREATE TABLE `bytecodete`.`company` (
`idUser` int(11) NOT NULL,
`fantasyName` varchar(55) NOT NULL,
`corporateName` varchar(55) NOT NULL,
`cnpj` varchar(14) NOT NULL,
PRIMARY KEY (`idUser`),
UNIQUE KEY `cnpj` (`cnpj`),
CONSTRAINT `company_ibfk_1` FOREIGN KEY (`idUser`) REFERENCES `user` (`id`)
ON DELETE CASCADE ON UPDATE CASCADE
)
// COMPANY_LINKS TABLE
DROP TABLE IF EXISTS `bytecodete`.`company_links`;
CREATE TABLE `bytecodete`.`company_links` (
`id` int(11) NOT NULL DEFAULT '0',
`idCompany` int(10) unsigned NOT NULL,
`serviceName` varchar(45) NOT NULL,
`link` varchar(45) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
CONSTRAINT `FK_company_links_1` FOREIGN KEY (`id`) REFERENCES `company` (`idUser`)
ON DELETE CASCADE ON UPDATE CASCADE
)
Я знаю, что это исключение возникает, когда я пытаюсь вставить что-то в таблицу, где есть внешний ключ, и у меня нет настройки некоторого значения для этого ключа.
Но это не мой случай, вот мой вывод:
11:47:30,809 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
Hibernate:
insert
into
bytecodete.user
(email, password, type)
values
(?, ?, ?)
11:47:30,948 TRACE StringType:133 - binding 'valter.bcc@gmail.com' to parameter: 1
11:47:30,949 TRACE StringType:133 - binding 'U25YM/DOl5k=' to parameter: 2
11:47:30,950 TRACE IntegerType:133 - binding '2' to parameter: 3
Hibernate:
insert
into
bytecodete.company
(cnpj, corporateName, fantasyName, idUser)
values
(?, ?, ?, ?)
11:47:31,214 TRACE StringType:133 - binding '98806728000100' to parameter: 1
11:47:31,215 TRACE StringType:133 - binding 'Semana da Computação e Tecnologia' to parameter: 2
11:47:31,215 TRACE StringType:133 - binding 'SECOT' to parameter: 3
11:47:31,216 TRACE IntegerType:133 - binding '37' to parameter: 4
idCompany=37
Hibernate:
select
company_.idUser,
company_.cnpj as cnpj9_,
company_.corporateName as corporat3_9_,
company_.fantasyName as fantasyN4_9_
from
bytecodete.company company_
where
company_.idUser=?
11:47:31,300 TRACE IntegerType:133 - binding '37' to parameter: 1
11:47:31,316 TRACE StringType:172 - returning '98806728000100' as column: cnpj9_
11:47:31,316 TRACE StringType:172 - returning 'Semana da Computação e Tecnologia' as column: corporat3_9_
11:47:31,351 TRACE StringType:172 - returning 'SECOT' as column: fantasyN4_9_
Hibernate:
insert
into
bytecodete.company_links
(idCompany, link, serviceName, id)
values
(?, ?, ?, ?)
11:47:31,353 TRACE IntegerType:133 - binding '37' to parameter: 1
11:47:31,354 TRACE StringType:133 - binding 'http://www.flickr.com/services/api/' to parameter: 2
11:47:31,354 TRACE StringType:133 - binding 'Flickr' to parameter: 3
11:47:31,355 TRACE IntegerType:133 - binding '0' to parameter: 4
11:47:31,433 WARN JDBCExceptionReporter:77 - SQL Error: 1452, SQLState: 23000
11:47:31,452 ERROR JDBCExceptionReporter:78 - Cannot add or update a child row: a foreign key constraint fails (`bytecodete`.`company_links`, CONSTRAINT `FK_company_links_1` FOREIGN KEY (`id`) REFERENCES `company` (`idUser`) ON DELETE CASCADE ON UPDATE CASCADE)
Извините, ребята, что беспокою вас, но мне действительно нужна помощь с этим, я не знаю, что случилось.
С наилучшими пожеланиями, Вальтер Энрике.
Ответ №1:
Вероятно, нам потребуется просмотреть некоторый код, чтобы помочь вам больше, но, основываясь только на операторах INSERT, похоже, что, возможно, ваш внешний ключ от company_links
до company
неверен. Ваша ВСТАВКА в company_links
имеет значение 37 для idCompany
и 0 для id
. Ваш внешний ключ настроен на id
, а не idCompany
, поэтому значение 37 должно быть установлено на id
, или внешний ключ должен быть изменен на idCompany
.
Ответ №2:
Похоже, вы перепутали порядок параметров. Ваш оператор insert является:
insert into bytecodete.company_links (idCompany, link, serviceName, id) values (?, ?, ?, ?)
И вы привязываете 37 к параметру 1 (idCompany) и 0 к параметру 4 (id). Идентификатор должен быть 37, а не 0.
Комментарии:
1. 37 — это идентификатор моей компании, а 0 — идентификатор моей таблицы company_links.
2. Но ваш внешний ключ из company_links в company находится на company_links.id столбец. Похоже, что вместо этого это должно быть в столбце idCompany.