테이블 설계 오류 - JPA 다대일, 일대다 매핑

Ryu·2023년 2월 18일
0

JPA

목록 보기
2/4

다대일, 일대다로 풀어내는 도중 발생한 문제점을 정리해보려 한다.

다대다 관계로 설정했을 때, 중간테이블에 필드를 추가할 수 없다는 문제점으로 인해 실무에서는 사용하지 않는다는 것을 알고 있었다.
이에 일대다, 다대일 관계로 풀어내어 JPA를 활용한 테이블 구성을 진행하고 있었는데 다음과 같은 문제점이 생겼다.

그림으로 살펴보면 다음과 같다.

CATEGORY_CATEGORY_ITEMS 라는 특이한 테이블이 생겼다.

원인

  • JPA 에서는 엔티티에 대해서 자동 매핑을 통해 테이블을 생성하는데 이 과정에서 무언가 문제가 발생했다고 생각했다.
  • 실제로 객체와 테이블의 패러다임이 다르기 때문에(테이블은 CATEGORY_ITEM 테이블에서 CATEGORY 의 FK 를 관리함으로써 모두 해결 가능.) 객체를 테이블로 옮겨주는 JPA 를 사용할 때에는 이 부분을 주의했어야 했다...
  • CATEGORY 테이블에서 @OneToMany 로 CATEGORY_ITEM 컬렉션을 가질 때, mappedBy 속성을 통해 두 엔티티 객체 사이에서도 연관관계 주인인 Category category 에서 관리한다는 것을 알려줘야 한다!
    • 그래야 두 엔티티 연관관계 속에서 한 쪽에서만(연관관계 주인이 있는 쪽) 수정 가능해지고, '테이블'의 패러다임과 부합할 수 있다.

해결

  • 해결 방법은 간단하다. mappedBy 속성을 넣어주는 것.
profile
Strengthen the core.

0개의 댓글