Repeated column in mapping for entity 에러 해결

2022. 4. 18. 00:25BackEnd(Java)/JPA 트러블 슈팅

프로젝트를 진행하면서 특정 엔티티에 동일한 엔티티 필드를 2개 이상 있는 경우가 생겼다.

아래 그림 1을 보면 Member 엔티티를 2개의 필드가 있다.(Member pt, Member writer)

 

그림 1 - 왼쪽 Member 필드 2개를 가지는 특정 엔티티, 오른쪽 Member 엔티티   

처음에는 @JoinColumn의 name 속성을 연관관계가 있는 엔티티(Member)의 PK값의 @Column의 name값과 무조건 동일하게 설정해줘야 한다고 생각했다.(여기서는 MEMBER_ID)

 

하지만 그렇게 하면 아래 그림 2처럼 오류가 발생하게 된다.

 

그림 2 - Repeated column in mapping for entity 오류

@JoinColumn에 대해서 잘못 이해하고 있었고 제대로 이해하기 위해서 찾아보게 되었다.

 

@JoinColumn

  1. @joinColumn은 어노테이션이 붙은 필드의 엔티티를 추적해서 그 엔티티(Member)의 PK와 Join 시켜준다.
  2. @joinColumn은 연관관계의 주인인 엔티티가 가지게 되고 그 반대인 엔티티(Member)는 mappedBy를 사용하여 연관관계 설정을 한다.
  3. name 옵션 값은 꼭 @JoinColumn 어노테이션이 붙은 필드의 엔티티(Member)의 컬럼명과 꼭 동일하게 설정하지 않아도 된다. 즉, name 옵션은  해당 엔티티에서 외래 키 컬럼명을 만드는 설정이다. (DB에서 왜래키 컬럼명 설정하는 것과 같다.)

 

@JoinColumn에 대해서 이해한 후 아래 그림 3처럼 수정하고 서버를 시작하였다.

DB를 확인해보니 그림 4처럼 지정한 외래 키 컬럼 명의 필드가 들어가 있었다.

 

그림 3 - 수정된 엔티티

 

그림 4 - DB 반영

 

정리

JPA에 개념에 대해 충분히 인지하지 못한 상태에서 개발을 하다 보니 오류들이 반복되어 나오고 있다.

내 생각에는 JPA를 사용할 때는 연관관계가 제일 핵심이라고 생각한다. 그러니 연관관계에 대한 충분한 더 이해하고 개발을 해보자..😅😅


참고자료

반응형