2016-04-25 22 views
0

我跟進從這個.jdbc4.MySQLIntegrityConstraintViolationException:不能添加或更新子行:外鍵約束註冊和登記過程中失敗

URL教程http://hellokoding.com/registration-and-login-example-with-spring-xml-configuration-maven-jsp-and-mysql/

我在我的數據庫中三個實體即用戶,角色和角色用戶。 ROLE_USER有一個外鍵,分別爲用戶和角色表所示,下面的圖片

enter image description here

一切工作正常,但馬上我嘗試創建我有一個錯誤Cannot add or update a child row: a foreign key constraint fails

這是一個新的用戶完整的堆棧跟蹤

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`accounts`.`user_role`, CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    com.mysql.jdbc.Util.handleNewInstance(Util.java:400) 
    com.mysql.jdbc.Util.getInstance(Util.java:383) 
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973) 

請問可能有什麼問題?

+0

看起來你有bot插入user_id – Jens

回答

1

您是否確定將user_id & role_id定義爲主鍵並啓用自動增量。如下更正:

 
CREATE TABLE `user_role` (
    `user_id` int(11) NOT NULL, 
    `role_id` int(11) NOT NULL, 
    PRIMARY KEY (`user_id`,`role_id`), 
    KEY `fk_user_role_roleid_idx` (`role_id`), 
    CONSTRAINT `fk_user_role_roleid` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `fk_user_role_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

enter image description here

以上是USER_ROLE表。如果你嘗試插入另一個user_id 6 with role_id 1,它將會失敗,如下所示: enter image description here

+0

你可以有兩個主鍵在表上自動增量嗎? – Blaze

+0

不在一張桌子上 – Ktonneh

+0

我從迄今爲止學到的東西中學到了一個表只能有一個主鍵 – Blaze

相關問題