HyeLog
[JPA, MySQL] Repository.save() 안되는 이유, 다른 테이블의 FK 인 컬럼 변경 에러 해결 방법 (Feat. AUTO_INCREMENT) 본문
[JPA, MySQL] Repository.save() 안되는 이유, 다른 테이블의 FK 인 컬럼 변경 에러 해결 방법 (Feat. AUTO_INCREMENT)
shj718 2023. 7. 8. 21:47Spring 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 |
---|