본문 바로가기
LEARN/ERROR

[ERROR] cannot add or update a child row: a foreign key constraint fails

by 아이엠제니 2024. 8. 4.

 


 

 

 

`스프링부트 SNS프로젝트` 클론 코딩을 하던 중, 포스트맨에서 테스트를 했는데 위와 같은 에러가 났다.

해당 부분은 이미지에 '좋아요'를 하는 기능이었다.

 

 

java.sql.SQLIntegrityConstraintViolationException: (conn=1666) 
Cannot add or update a child row: a foreign key constraint fails 
(`photogram`.`likes`, CONSTRAINT `FKdrmcrl980hncyhnurju8nm5dy` 
FOREIGN KEY (`imageId`) REFERENCES `image` (`id`))

해당 에러는 데이터베이스에서 외래키 제약 조건이 위반되었을 때 발생한다.

 

  • 부모 키가 없는 경우
  • 부모 키의 삭제
  • 제약 조건 위반

 

위와 같은 이유가 있다.

 

 

더보기

Hibernate: INSERT INTO likes(imageId, userId, createdDate) VALUES(?, ?, now())
2024-07-26T13:25:57.419+09:00  WARN 27904 --- [nio-7070-exec-5] o.http://m.jdbc.message.server.ErrorPacket : Error: 1452-23000: Cannot add or update a child row: a foreign key constraint fails (`photogram`.`likes`, CONSTRAINT `FKdrmcrl980hncyhnurju8nm5dy` FOREIGN KEY (`imageId`) REFERENCES `image` (`id`))
2024-07-26T13:25:57.420+09:00  WARN 27904 --- [nio-7070-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1452, SQLState: 23000
2024-07-26T13:25:57.420+09:00 ERROR 27904 --- [nio-7070-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : (conn=1666) Cannot add or update a child row: a foreign key constraint fails (`photogram`.`likes`, CONSTRAINT `FKdrmcrl980hncyhnurju8nm5dy` FOREIGN KEY (`imageId`) REFERENCES `image` (`id`))
2024-07-26T13:25:57.422+09:00 ERROR 27904 --- [nio-7070-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataIntegrityViolationException: JDBC exception executing SQL [INSERT INTO likes(imageId, userId, createdDate) VALUES(?, ?, now())] [(conn=1666) Cannot add or update a child row: a foreign key constraint fails (`photogram`.`likes`, CONSTRAINT `FKdrmcrl980hncyhnurju8nm5dy` FOREIGN KEY (`imageId`) REFERENCES `image` (`id`))] [n/a]; SQL [n/a]; constraint [null]] with root cause

java.sql.SQLIntegrityConstraintViolationException: (conn=1666) Cannot add or update a child row: a foreign key constraint fails (`photogram`.`likes`, CONSTRAINT `FKdrmcrl980hncyhnurju8nm5dy` FOREIGN KEY (`imageId`) REFERENCES `image` (`id`))

 

 

`image` 테이블의 ID를 `like` 테이블에서 참조하고 있다.

그래서 `image`테이블을 살펴 봤다.

 

아...

위에 포스트맨을 자세히 보면 id가 `1`로 되어있다.

이전에 `1`로 되어있던 것을 수정하지 않고 호출했던 것이다.

당연히 `image` 테이블에 있다고 생각했기 때문이다.

 

그런데 `image` 테이블을 보니, id 1번이 없어서 생긴 오류였다.

없는 걸 자꾸 좋아요 하려고 하니, 당연히 에러가 날 수밖에 없었던 거였다.

 

 

`image`테이블에 존재하는 id `7`을 넣으니, 좋아요에 성공했다.

 

 

`like` 테이블을 확인하니, 잘 추가된 것을 볼 수 있었다.

 

참조 관계가 있다면, 부모 테이블에 해당 PK가 있는지 우선 확인을 하고 테스트 호출을 해야할 것 같다.

 

 

 

 

 

300x250