- 본 포스팅은 인프런 김영한 강사님 [자바 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 |
---|