연관관계 매핑시 고려사항
- 다중성
- 다대일 : @ManyToOne
- 일대다 : @OneToMany
- 일대일 : @OneToOne
- 다대다 : @ManyToMany(사용 안하는 거 권장)
- 단방향, 양방향
- 태이블은 외래 키 하나로 양쪽 조인 가능하기 때문에 방향이라는 개념 없다
- 객체는 참조용 필드가 있는 쪽으로만 참조 가능 - > 한족만 참조시 단방향 , 양쪽이 서로 참조하면 양방향
- 연관관계의 주인
- 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺지만 객체 양방향 관계는 A->B , B->A 처럼 참조가 2군데이므로 테이블의 외래 키 관리할 곳을 지정해야함 (@JoinColumn)
- 연관과계의 주인은 외래 키를 관리하는 참조
다중성 종류
- 다대일
- 단방향 : 가장 일반적으로 사용되는 연관관계라고 함 나는 실무에서 JPA를 사용 안해봐서 아직 잘 모르겠다
- 양방향 : 외래 키가 있는 쪽이 연관관계의 주인이며 양쪽을 서로 참조하도록 개발
- 일대다
- 일대다 단방향은 일이 연관관계의 주인이다 but 테이블 일대다 관계는 항상 다 쪽에 외래 키가 있다
- 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조 형성
- @JoinColumn을 꼭 사용해서 주인을 정해져야 함. 그렇지 않으면 조인 테이블 방식을 사용함
- 일대일
- 주 테이블에 외래 키
- 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾음
- 객체지향 개발자 선호하며 JPA 매핑이 편리하다
- 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능
- 단점 : 값이 없으면 외래 키에 null 허용
- 대상 테이블에 외래 키
- 대상 테이블에 외래 키가 존재하며 데이터베이스 개발자가 선호함
- 장점 : 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지하기 좋음
- 단점 : 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩됨
- 주 테이블에 외래 키
- 다대다
- 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없으므로 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어야 함
- 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능
- @JoinTable로 연결 테이블 지정
- 실무에서 거의 사용 안함
출처] 해당 내용은 김영한 강사님의 인프런 강의를 학습하며 복습을 위해 정리한 글입니다. - https://www.inflearn.com/course/ORM-JPA-Basic
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'Spring > JPA' 카테고리의 다른 글
| [JPA] 프록시와 연관관계에 대해(즉시로딩과 지연로딩) (0) | 2023.03.08 |
|---|---|
| [JPA] 상속관계 매핑 (0) | 2023.03.05 |
| [JPA] EntityMapping / 연관관계 매핑2 (0) | 2023.03.04 |
| [JPA] EntityMapping / 연관관계 매핑 1 (0) | 2023.03.04 |
| [JPA] 영속성 컨텍스트 (0) | 2023.03.03 |