- 연관관계 매핑시 고려사항 3가지
1. 다중성
2. 단방향, 양방향
3. 연관관계의 주인
- 다중성
1. 다대일 : @ManyToOne
2. 일대다 : @OneToMany
3. 일대일 : @OneToOne
4. 다대다 : @ManyToMany
- 단방향, 양방향
1. 테이블
1.1. 외래 키 하나로 양쪽 조인 가능
1.2. 사실 방향이라는 개념이 없다.
2. 객체
2.1. 참조용 필드가 있는 쪽으로만 참조 가능
2.2. 한쪽만 참조하면 단방향
2.3. 양쪽이 서로 참조하면 양방향
- 연관관계의 주인
1. 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.
2. 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데이다.
3. 객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야한다.
4. 연관관계의 주인 : 외래 키를 관리하는 참조
5. 주인의 반대편 : 외래 키에 영향을 주지 않는다. 단순 조회만 가능하다.
- 다대일 [N:1]
- 다대일 단방향
1. 가장 많이 사용하는 연관관계다.
2. 다대일 <-> 일대다
- 다대일 양방향
1. 외래 키가 있는 쪽이 연관관계의 주인
2. 양쪽을 서로 참조하도록 개발해야 한다.
Team team1 = new Team();
team1.setName("TeamA");
em.persist(team1);
Member member = new Member();
member.setUsername("member1");
em.persist(member);
team1.addMember(member);
------------------------------
public void addMember(Member member) {
member.setTeam(this);
members.add(member);
}
// 양쪽을 서로 참조해야 하므로 양방향 참조에 대한 메서드를 생성하여 사용한다.
- 일대다 [1:N]
- 일대다 단방향
1. 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인이다.
2. 테이블 일대다 관계는 항상 다(N)쪽에 외래 키가 있다.
3. 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조다.
4. JoinColumn을 꼭 사용해야 한다. 그렇지 않으면 조인 테이블 방식을 사용한다.
- 정리
1. 일대다 단방향 매핑의 단점
1.1. 엔티티가 관리하는 외래 키가 다른 테이블에 있다.
1.2. 연관관계 관리를 위해 추가로 UPDATE SQL 실행한다.
2. 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하는 것이 좋다.
- 일대일 [1:1]
- 일대일 관계
1. 일대일 관계는 그 반대도 일대일이다.
2. 주 테이블이나 대상 테이블 중에 외래 키 선택이 가능하다.
2.1. 주 테이블에 외래 키
2.2. 대상 테이블에 외래 키
3. 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가
- 일대일 : 주 테이블에 외래 키 단방향
- 다대일 단방향 매핑과 유사하다.
- 일대일: 주 테이블에 외래 키 양방향
- 다대일 양방향 매핑처럼 외래 키가 있는 곳이 연관관계의 주인이다.
- 반대편은 mappedBy를 적용한다.
- 일대일: 대상 테이블에 외래 키 단방향
- 단방향 관계는 JPA 지원을 하지 않는다.
- 양방향 관계는 지원한다.
- 일대일: 대상 테이블에 외래 키 양방향
- 일대일 주 테이블에 외래 키 양방향과 매핑 방법이 같다.
출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (자바 ORM 표준 JPA 프로그래밍 - 기본편)
'Programming > JPA' 카테고리의 다른 글
JPA - 프록시 (0) | 2023.07.17 |
---|---|
JPA - 고급 매핑 (0) | 2023.07.14 |
JPA - 연관관계 매핑 기초 (0) | 2023.07.14 |
JPA - 엔티티 매핑 (0) | 2023.07.14 |
JPA - 영속성 관리 (0) | 2023.07.14 |