문을 실행할 수 없습니다; SQL [N / A] 제약 [널] (여러 장 SQL 문을 실행하는 데 제공 할 수 없음)

멀티 테이블 삭제 오류 :

org.springframework.dao.DataIntegrityViolationException는 : 문을 실행할 수 없습니다; SQL [N / A]; 제약 [널]; 상자의 예외는 org.hibernate.exception.ConstraintViolationException입니다 : 문을 실행할 수 없습니다

OU \ javax의 \ 엘 \ javax.el-API를 \ 2.2.4 \ javax.el-API-2.2.4.jar; E : \ local_repository \ repository_pinyougou \ 조직 \ 글래스 피쉬 웹 \ \ javax.el \ 2.2.4 \ javax의 .el-2.2.4.jar "com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.wsc.core.onetone.ManyToMany, deleteUser의
log4j에이 없음 펜더가 로거 (org.springframework를 찾을 수 없습니다 경고한다. . test.context.junit4.SpringJUnit4ClassRunner)
의 log4j : WARN의 log4j 시스템을 제대로 초기화하십시오.
최대 절전 모드 : username3_6_0_로 user_id1_6_0_, password2_6_0_ 같은 user0_.password, user0_.username로 user0_.user_id 선택, roleid2_7_1_로 role2_.role_id, userid1_7_1_로 role1_.userid role_nam3_5_2_로, memo2_5_2_로, role_id1_5_2_로 role2_.role_name을 role2_.memo을 role2_.role_id 왼쪽 외부 user0_ 사용자 user0_.user_id = role1_.userid 외측 왼쪽 USER_ROLE role1_ 합류로부터 role1_.roleid = role2_.role_id 여기서 user0_.user_id = ON 역할 role2_ 가입?
에서 삭제 : 최대 절전 모드 USER_ROLE = 경우 사용자 ID?
최대 절전 모드 : 어디 ROLE_ID = 역할에서 삭제 하시겠습니까?
최대 절전 모드 : 어디 ROLE_ID = 역할에서 삭제 하시겠습니까?

 

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException :에 의한 삭제하거나 부모 행을 업데이트 할 수 없습니다 : 외래 키 제약 (`shop`.`user_role`, CONSTRAINT`FKbo5ik0bthje7hum554xb17ry6` FOREIGN KEY (`roleid`) 참조를`실패 role` (`role_id`))

분석 : 당신은 하나의 테이블 데이터 에러를 삭제하려면 

내 오류가 삭제했을 때의 : 테이블의 주요 외래 키 제약 중간, 삭제하는 다른 문 테이블을 수행 할 수 있습니다

중급 사용자 역할 테이블 테이블 테이블 세 개의 테이블

규칙 순서를 삭제 : 기본 테이블의 실행 또는 테이블에서 중간 테이블 (외래 키 제약 조건)을 삭제 : 외래 키 제약 조건을 SQL 문을 실행할 수 없습니다,

해결 방법 :

  표 플러스 @ManyToMany합니다 (mappedBy = "역할",FETCH = FetchType.EAGER

  기본 테이블 플러스 @ManyToMany (= 캐스케이드 CascadeType.ALL, = FetchType.EAGER FETCH )

결과 :

1  com.wsc.core.onetone.ManyToMany, deleteUser
 2 의 log4j는 : 없음 펜더를 찾을 수 없습니다 WARN 에 대한 로거 (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
3 하이버 네이트 : 선택 user0_.user_id  user_id1_6_0_, user0_.password 같은 password2_6_0_, user0_.username 같은 username3_6_0_는 role1_.userid 같이 , userid1_7_1_ role2_.role_id  roleid2_7_1_, role2_.role_id  role2_.memo, role_id1_5_2_ 같이 , memo2_5_2_ role2_.role_name을 대로 role_nam3_5_2_ 에서왼쪽 외부 user0_ 사용자 role1_.roleid = role2_.role_id 역할에 참여 role2_ user0_.user_id = role1_.userid 외측 왼쪽 USER_ROLE role1_ 가입 여기서 user0_.user_id =를?
4 하이버 네이트 : 선택 user0_.roleid  roleid2_7_0_, user0_.userid 같은 userid1_7_0_, user1_.user_id 같은 user_id1_6_1_, user1_.password 같은 password2_6_1_, user1_.username 같은 username3_6_1_ 로부터 이너 user0_.userid = user1_.user_id에 사용자 user1_ 가입 user0_ USER_ROLE 여기서 user0_ .roleid =?
5 최대 절전 모드 : 선택 role0_.userid userid1_7_0_, role0_.roleid 같이 , roleid2_7_0_ role1_.role_id  role1_.memo, role_id1_5_1_ 같이 , memo2_5_1_ role1_.role_name 같은 role_nam3_5_1_를 으로부터 role0_.roleid = role1_.role_id에 USER_ROLE role0_ 내측 가입 역할 role1_ 여기서 role0_.userid =?
6 하이버 네이트 : 선택 user0_.roleid  roleid2_7_0_, user0_.userid 같은 userid1_7_0_, user1_.user_id 같은 user_id1_6_1_, user1_.password 같은 password2_6_1_, user1_.username 같은 username3_6_1_ 내측 USER_ROLE user0_는 user0_.userid = user1_.user_id의 사용자 가입 user1_ 여기서 user0_.roleid =를?
7  
8  
9 절전 모드 : = 여기서 사용자 ID USER_ROLE에서 삭제 하시겠습니까? 
10 최대 절전 모드 : 어디 USER_ID = 사용자로부터 삭제 하시겠습니까?      //仅执行两个删除语句,删除单表ID OK!
 (11)  
(12)  
(13)  의 log4j : WARN 제대로 log4j에 시스템을 초기화하십시오.
(14 개)  
(15) 프로세스 종료 코드 완료 0

2 .... 두 테이블을 삭제하려면 : 모든 외래 키 제약 조건 확인을 수행하기 위해, 데이터 삭제를 존재 제거해야합니다.

  중간 테이블     제약 아이디 (두 테이블) 

A (이드 차 테이블) B (표에서 ID)

       2 1

       1 2

       1 3   

그래서 : ID = 2를 삭제하려면 ID = ID 1도 = 3 삭제 제거해야합니다.

실행 방법 : 삭제 (1), 삭제 (2), (3), 삭제 전체가 삭제합니다.

추천

출처www.cnblogs.com/wangshichang/p/11390933.html