JPA DATA 엔티티 어노테이션이 잘 작동하지 않을 때
스프링 부트 + JPA DATA로 서버를 개발하고 있었는데,
JPA DATA를 사용하는 부분에서
@GeneratedValue 어노테이션이 제대로 작동하지 않는
또 @Column(nullable='false') 도 제대로 작동하지 않아서
Field 'post_img_id' doesn't have a default value
자꾸 이런 오류가 발생했다.
한마디로 기본키에서
값이 자동으로 생성되지 않음 => 기본키는 null값이 되면 안됨 => 오류 발생
이런 상황이었다.
Datagrip으로 뜯어보니
분명 설정한 어노테이션 옵션들이 제대로 작동중이지 않은것을 확인했다.
그래서 datagrip으로 필드설정을 수동으로 바꿔줬는데
Cannot change column 'post_img_id': used in a foreign key constraint 'FKsm7rxneua28dabgupobcmft78' of table 'webide.image'.
이런 오류가 떴다.
요약하자면 참조키 제약조건 때문에 필드 설정을 못바꿔주는 상황이였던것이다.
-- 외래 키 제약 조건 일시 해제
ALTER TABLE webide.image DROP FOREIGN KEY FKsm7rxneua28dabgupobcmft78;
-- 컬럼 변경 작업 수행 (예: 데이터 타입 변경, AUTO_INCREMENT 설정 등)
ALTER TABLE webide.post_image MODIFY COLUMN post_img_id BIGINT AUTO_INCREMENT NOT NULL;
-- 외래 키 제약 조건 재생성
ALTER TABLE webide.image ADD CONSTRAINT FKsm7rxneua28dabgupobcmft78 FOREIGN KEY (post_img_id) REFERENCES webide.post_image(post_img_id);
그래서 이 SQL문을 실행해서 수동으로 필드 설정을 바꿔준 결과
오류가 해결됐다.
예를 들어 설명하자면
webide : 스키마
image : post_image 테이블을 '참조하는' 테이블 (다시말해서 참조키가 있는 테이블)
post_image : '참조 당하는' 테이블(외래키가 없고, 기본키)
FKsm7rxneua28dabgupobcmft78
이거는
Cannot change column 'post_img_id': used in a foreign key constraint 'FKsm7rxneua28dabgupobcmft78' of table 'webide.image'.
참조키 제약조건 오류가 뜰때 나오는 값을 복사 붙여넣기 했다.