Hibernate: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть эта проблема:

Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (bytecodete. company_links, CONSTRAINT FK_company_links_1 FOREIGN KEY (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)

Извините, ребята, что беспокою вас, но мне очень нужна помощь, я не знаю, что случилось.

ЛучшеС уважением, Вальтер Энрике.

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Возможно, нам понадобится какой-то код, чтобы помочь вам больше, но, основываясь на инструкциях INSERT, похоже, что ваш внешний ключ от company_links до company неверен.Ваша ВСТАВКА в company_links имеет 37 для idCompany и 0 для id.Ваш внешний ключ установлен на id, а не idCompany, поэтому 37 следует установить на id, или внешний следует изменить на idCompany.

0 голосов
/ 11 апреля 2011

Похоже, у вас перепутан порядок параметров. Ваше заявление о вставке:

insert 
into
    bytecodete.company_links
    (idCompany, link, serviceName, id) 
values
    (?, ?, ?, ?)

И вы привязываете 37 к параметру 1 (idCompany), а 0 к параметру 4 (id). Идентификатор должен быть 37, а не 0.

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