본문 바로가기

Dev/JPA

다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지

  • 다중성
  • 단방향, 양방향
  • 연관관계의 주인

다중성

  • 다대일 : @ManyToOne
  • 일대다 : @OneToMany
  • 일대일 : @OneToOne
  • 다대다 : @ManyToMany -  보통 실무에서는 쓰면 안되는 것

단방향, 양방향

테이블

  • 외래 키 하나로 양쪽 조인 가능
  • 사실 방향이라는 개념이 없음

객체

  • 참조용 필드가 있는 쪽으로만 참조 가능
  • 한쪽만 참조하면 단방향
  • 양쪽이 서로 참조하면 양방향 - 사실 양방향이라기 보다는 용어일 뿐이고 객체입장에서는 방향이 하나인 셈이다.

연관관계의 주인

  • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음
  • 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데
  • 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야함
  • 연관관계의 주인 : 외래 키를 관리하는 참조
  • 주인의 반대편  : 외래 키에  영향을 주지 않음, 단순 조회만 가능

관계에는 여러가지 방식이 있음 -> 다대일, 일대다, 일대일, 다대다

다대일 : 대부분 이 방식을 추천한다. JPA를 통해 명확하게 처리할 수 있는 방법

일대일 : 외래키가 어느방향에 넣던지 간에 일대일 관계로 연관관계가 형성된다. 

  • DBA 입장에서는 테이블 관계에서처럼 Member와 Locker로 했을 경우 Locker에 외래키를 들고있는 것을 선호
  • 객체지향적 개발자 입장에서는 Member에 외래키를 들고있는 것을 선호한다. 이유는 Member에서 Locker까지 모두 처리할 수 있기 때문이다.
  • DBA와의 원활한 협의를 통해 방향을 지정하는 것이 중요하다.

하지만 JPA에서 사용할 경우에는 되도록 다대일 관계로 해서 사용하길 추천한다. 

 

특히나 일대다나 다대다 같은경우는 되도록 사용하지 않아야 한다.

 

 

 

 

'Dev > JPA' 카테고리의 다른 글

프록시와 연관관계 관리  (0) 2020.08.08
JPA 상속관계 매핑  (0) 2020.07.30
연관관계 매핑 기초  (0) 2020.07.15
엔티티 매핑  (0) 2020.07.12
JPA내부 구조(영속성 관리)  (0) 2020.07.06