[JPA/MariaDB]errno: 150 Foreign key constraint is incorrectly formed 해결방법
MariaDB와 JPA로 복합키이면서 그 중 하나는 FK인 테이블을 만들고 싶었는데 계속해서 FK 에러가 발생했다.
위 ERD와 같이 symptom테이블을 만들고 싶었다.
모든 키가 복합키이면서 review_id키는 FK 제약조건을 걸고싶었다.
create해서 테이블은 잘 생성되지만 FK를 걸다가 에러를 발생했다.
- 에러코드
1 | Hibernate: alter table symptom add constraint FKct400cemwq2cjh9mdfusfieko foreign key (review_id) references review (id) |
에러 150을 해결하는 방법 4가지
아래 4가지 조건에 부합해야한다.
- 데이터 타입이 일치해야 함
- NOT NULL or NULL 여부가 동일해야 함
- 참조받는 데이터가 unique key / primary key 이어야함
- 두 테이블의 charset 이 같아야함
참고 포스팅 : 박스님 - errno: 150 “Foreign key constraint is incorrectly formed
기존 테이블
위 4가지 조건에서 1번과 4번조건이 부합하지않는다.
- 데이터 타입이 BIGINT와 VARCHAR임
- 조합이 UTF-8 한쪽만 설정되어 있음
해결
복합키를 위해 생성한 클래스에서 데이터 타입이 잘못 지정되어있었다.
String타입을 Long타입으로 변경하여 일치 시켜주니 정상 작동했다!
1 |
|
- 정상작동한 테이블 모습
여담이지만 이 별것도 아닌 에러를 가지고 2시간이나쓰고 그것도 모자라서 과장님께 한번만 도와달라고 부탁까지했다.
과장님은 단 5분만에 데이터 타입이 다른 것을 찾아주셨다…그저 빛🌞
역시 물어보길 잘했다. 완벽하게 이해했기때문에 이 에러는 다시는 만나지 않을 것 같다.
참고
에러부분 말고 전체 코드는 JPA: Entity에 복합키와 FK 제약조건 넣기 포스팅에서 확인할 수 있다.