HyeLog

[JPA, MySQL] Repository.save() 안되는 이유, 다른 테이블의 FK 인 컬럼 변경 에러 해결 방법 (Feat. AUTO_INCREMENT) 본문

웹 개발/에러 해결

[JPA, MySQL] Repository.save() 안되는 이유, 다른 테이블의 FK 인 컬럼 변경 에러 해결 방법 (Feat. AUTO_INCREMENT)

shj718 2023. 7. 8. 21:47

Spring Boot (JPA) 로 개발하던 중에 productRepository.save(product); 로 엔티티를 저장하는 과정에서

 

다음과 같은 에러를 마주했다.

Field 'id' doesn't have a default value

 

엥?! 나는 분명 id 를 @GeneratedValue 로 MYSQL 에서 자동 증가되게끔 구현했는데 default value 가 왜 필요하지??

 

 

그래서 MySQL 로 가보니... 그 테이블만 id 컬럼에 AUTO_INCREMENT 가 설정되어 있지 않다는 사실을 발견했다!

 

바로 AUTO_INCREMENT 설정하면 되겠네~ 하고 설정하려 했더니...

 

 

다음과 같은 에러를 마주했다.

Cannot change column 'id': used in a foreign key constraint 'FK6oo0cvcdtb6qmwsga468uuukk' of table '연관 테이블 이름'

 

에러의 의미는 내가 변경하려는 테이블의 컬럼 'id'(PK) 를 다른 테이블에서 FK로 사용하고 있어서 변경이 불가능하다는 뜻이었다.

 

해결 방법을 구글링 하다가 이 링크를 통해 해결할 수 있었다.

 

해당 링크에서 소개한 방법은

1. foreign key constraint 를 제거하고,

2. 변경하려는 컬럼을 변경한 후에,

3. 다시 foreign key constraint 를 생성

하는 것이었다!!

 

그래서 나는 아래와 같은 2개의 쿼리를 통해 문제를 해결할 수 있었다😊

 

1.  연관 테이블의 외래키 제약조건 제거하기

여기에서 [Foreign Key Constraint 이름] 은 위 에러메세지의 'FK6oo0cvcdtb6qmwsga468uuukk' 이다.

각자 본인의 DB 에서 확인할 수 있다. (Datagrip - MySQL 을 사용하는 필자의 경우, 연관 테이블의 indexes 에 외래키 제약조건이 존재했다.)

ALTER TABLE [컬럼을 변경하려는 테이블 이름]
	DROP FOREIGN KEY [Foreign Key Constraint 이름],
	MODIFY COLUMN [연관된 테이블의 FK 컬럼 이름] [연관된 테이블의 FK 컬럼 속성(예시: BIGINT)];

 

2. 컬럼 속성을 AUTO_INCREMENT변경

 

3. 다시 연관 테이블의 외래키 제약조건 만들기

ALTER TABLE [연관 테이블 이름]
     ADD CONSTRAINT [외래키 제약조건 이름 지정 (예시: FK_PRODUCT_IMAGE_PRODUCT_ID)]
     FOREIGN KEY ([연관된 테이블의 외래키 컬럼 이름])
     REFERENCES [변경한 테이블]([변경한 컬럼 (예시: id)]);

 

결과

id 컬럼 속성이 AUTO_INCREMENT 로 잘 변경 되었다!! 🙌

 

 

'웹 개발 > 에러 해결' 카테고리의 다른 글

JavaMailSender 빈(Bean) 등록 에러  (0) 2022.05.15