java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails 에러 발생
유저별로 자신의 글을 보여주기 위해 board 테이블에 user_id를 foreign key로 설정해줬다.
따라서, 게시글을 먼저 등록해줬을 때 생성된 키를 이용해서 user_id를 입력해줘야 한다고 판단한다.
<insert id="writeArticle" parameterType="articleDto">
insert into board values(#{userId}, #{title}, #{contents})
</insert>
위 코드가 이전 코드이다. 지금 userId를 바로 등록하려고하기 때문에 에러가 발생한다.
라고 생각했지만 그렇다기엔 아래와 같은 SQL문이 실행이 되어서 이상함을 느꼈다.
INSERT INTO `board` VALUES (0, 'user5', '안녕하세요', '안녕하세요');
문제는 userId를 사용자 이름으로 넘겨줬기 때문이었다.
게시글을 등록할 때 외래 테이블인 user 테이블에서 userId를 검색하고 존재한다면 등록이 된다.
그런데 userName은 외래키로 등록되어있지도 않고 당연하게도 userId에 userName과 동일한 값이 존재하지 않았기 때문에 MySQL 측에서 게시글 저장 기능을 막은 것이었다.