[JPA] 다양한 연관관계 매핑

동동·2022년 4월 14일

JPA

목록 보기
6/18
post-thumbnail

🚨 연관관계 매핑시 고려해야 할 사항 3가지

- 다중성
- 방향성(단방향, 양방향)
- 연관관계의 주인

다중성이란?

다중성은 대칭성이 있다.([N:1]의 반대는 [1:N])
주의할 점은 다대다 관계는 거의 사용되지 않는다!(실무에서 쓰면 안됨)

  • 다대일 : @ManyToOne
  • 일대다 : @OneToMany
  • 일대일 : @OneToOne
  • 다대다 : @ManyToMany

방향성이란?

테이블

  • 외래키(FK) 양쪽 조인이 가능하다.(테이블에서는 방향이라는 개념이 없다.)

객체

  • 참조용 필드가 있는 족으로만 참조 가능
  • 한쪽만 참조하면 단방향
  • 양쪽이 서로 참조하면 양방향(사실상 단방향이 2개 있는 것)

연관관계의 주인

  • 테이블의 경우 외래키 하나로 두개의 테이블이 연관관계를 맺음
  • 객체의 양방향은 위에서 말한 것처럼 단방향 2개로 이루어져 있음
  • 연관관계의 주인은 외래키를 관리하는 참조이다.
  • 연관관계의 주인이 아닌 객체는 조회만 가능하다.

📌 다대일(N : 1)

다대일 단방향

  • 가장 많이 사용하는 연관관계이다.
  • 다대일(N:1)의 반대는 일대다(1:N)

다대일 양방향

  • 외래키가 있는 쪽이 연관관계의 주인이다.
  • 연관관계에 있는 객체가 서로를 참조하도록 개발

📌 일대다(1 : N)

일대다 단방향

  • 일대다(1:N) 연관관계에서 일(1) 쪽이 연관관계의 주인이 된다.
  • 테이블에서는 다(N) 쪽에 외래키가 있다.
  • @JoinColumn을 꼭 사용해야 한다. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 연결 테이블을 하나 추가함)

📌 일대일(1 : 1)

다대일 연관관계와 유사
차이점이 있다면 두 개의 객체 모두 연관관계의 주인이 될 수 있고 테이블의 유니크 제약조건을 가져야 한다.

profile
괴발개발

0개의 댓글