Спящий режим: не удается добавить или обновить дочернюю строку: сбой ограничения внешнего ключа

#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.