- 본 포스팅은 인프런 김영한 강사님 [자바 ORM 표준 JPA 프로그래밍 - 기본편]강의를 바탕으로 작성되었습니다.(섹션6)

출처: https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

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

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

1) 다중성

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

2) 단방향, 양방향

사실 방향이라는 개념이 없고 한쪽이 참조하느냐, 양쪽 다 참조하느냐에 따라 단방향, 양방향 결정

 

3) 연관관계의 주인

  • 연관관계의 주인 : 외래 키를 관리하는 참조
  • 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 가능

2. 다대일 [N:1]

가장 많이 사용하는 연관관계이다.

단방향, 양방향 모두 존재하며, 외래 키가 있는 '다'쪽이 연관관계의 주인이다.

 

3. 일대다 [1:N]

일대다 단방향은 '일(1)'이 연관관계의 주인이다.

일대다 단방향 매핑의 단점은 엔티티가 관리하는 외래키가 다른 테이블에 있다는 점이다.

=> 따라서 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하자

 

일대다 양방향은 공식적으로 존재하지는 않는다.

그러나 읽기 전용 필드를 사용해서 양방향처럼 사용은 가능하다

ex) @JoinColumn(insertable=false, updatable=false)

=> JPA에서 이런 구조를 지원은 해주고 있으나 다대일 양방향을 사용하는 것이 더 바람직하다.

 

4. 일대일 [1:1]

주 테이블이나 대상 테이블 중에 외래키 선택 가능

  • 주 테이블에 외래 키
    • 객체지향 개발자 선호
    • JPA 매핑 편리
    • 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능
    • 단점 : 값이 없으면 외래 키에 null 허용
  • 대상 테이블에 외래 키
    • 전통적인 데이터베이스 개발자 선호
    • 장점 : 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지
    • 단점 : 지연로딩으로 설정해도 항상 즉시 로딩됨

5. 다대다 [N:M]

@ManyToMany를 사용하고 @JoinTable로 연결 테이블을 지정한다.

실무에서 사용권장하지 않으며 N:M의 관계를 갖는 엔티티끼리는 중간에 연결 테이블용 엔티티를

추가하는 방법을 권장한다.

 

'JPA' 카테고리의 다른 글

[JPA] 연관관계 매핑 기초  (0) 2022.07.11

+ Recent posts