[JPA] 다양한 연관관계 매핑 (2)

윤경·2021년 10월 17일
0

JPA

목록 보기
8/22
post-thumbnail

[4] 다대다 [N:M]

N:M은 쓰지말자

안되는 이유에 대해 알아볼테니 편하게 듣기

우선,

  • 관계형 데이터베이스는 정규화 된 테이블 2개로 다대다 관계를 표현할 수 없다.
  • 연결 테이블을 추가해 일대다, 다대일 관계로 풀어내야 한다.

반면, 객체는 컬렉션을 사용해 객체 2개로 다대다 관계를 표현할 수 있다.

  • @ManyToMany
  • @JoinTable을 사용해 연결 테이블을 지정해준다.
  • 단방향, 양방향 모두 가능하다.

그렇지만

  • 실무에선 사용할 수 없다.
  • 연결 테이블이 단순히 연결만 하고 끝내진 않는다.
    주문 시간, 수량 등 별의 별 데이터가 필요한데 그런 추가 데이터를 집어넣을 수 없다.

어째어째 그래도 쓰겠다 하면 🤷🏻‍♀️
연결 테이블용 엔티티 (ex. MemberProduct.java를 생성해 @Entity를 부여)를 추가해 연결 테이블을 엔티티로 승격해주면 됩니다.

@ManyToMany ➡️ @OneToMany, @ManyToOne


[5] 실전 예제 3 - 다양한 연관관계 매핑

아 맞다,, 나 프로젝트 없지,, 날렸지,, 만든다,,jpabook,,

만들어라,,

예제 3에서는 배송 카테고리를 추가하겠다.

  • 주문, 배송은 @OneToOne
  • 상품, 카테고리는 @ManyToMany

앞서 말했듯 다대다 관계는 일대다, 다대일로 구현해야 한다.
중간 테이블을 이용하자.

(@ManyToMany는 필드를 추가할 수 없고, 엔티티 테이블이 불일치한다. 그러므로 실전에서는 @ManyToMany 사용 금지)

📌 @JoinColumn

: 외래 키 매핑시 사용

📌 @ManyToOne

: 다대일 관계 매핑

📌 @OneToMany

: 다대일 관계 매핑


profile
개발 바보 이사 중

0개의 댓글