연관관계 주인
- 테이블 : 외래키 하나
- 객체 : 참조가 두군데 (A→B, B→A)
연관관계 매핑
- 다대일 N:1 @ManyToOne
- 일대다 1:N @OneToMany
- 일(1)이 연관관계 주인
- 다(N) 쪽에 외래키가 존재
- 연관관계 관리를 위해 추가로 UPDATE SQL 실행된다. 즉, 1:N 매핑보다 N:1 양방향 매핑을 사용하자.
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
- 일대일 1:1 @OneToOne
주 테이블이나 대상 테이블 중에 외래키를 선택할 수 있다.
- 반대편은 mappedBy 매핑하기
- // Member @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; // Locker @OneToOne(mappedBy = "locker") private Member member;
- 그렇다면, 어느 곳에 외래키를 설정하는 것이 좋을까?
- 주 테이블에 외래키
- 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인이 가능하다
- 단점 : 값이 없으면 외래키에 null이 허용된다. << nullable false 하면 되지 않나?
- 대상 테이블에 외래키 (단점이 치명적이다)
- 장점 : 주 테이블과 대상 테이블을 1:1에서 1:N으로 변경할 때 테이블 구조를 유지할 수 있다. N쪽이 외래키를 가지기 때문.
- 단점 : 지연로딩으로 설정해도 항상 즉시 로딩된다.
- 주 테이블에 외래키
- 다대다 N:M @ManyToMany : 실무에서 쓰이지 않는다.
- 관계형 DB에서 다대다를 표현할 수 없다.
- ManyToMany를 OneToMany, ManyToOne으로 사용한다.
'공부 > Spring' 카테고리의 다른 글
[JPA] 값 타입 (0) | 2022.07.02 |
---|---|
[JPA] 프록시와 연관관계 관리(지연로딩) (0) | 2022.07.02 |
[JPA] 연관관계 매핑 기초 (0) | 2022.07.02 |
[JPA] 엔티티 매핑 (0) | 2022.07.02 |
[JPA] 영속성 관리 - 내부 동작 방식 (0) | 2022.07.02 |
댓글