1) 연관관계 매핑 시 고려사항 3가지
(1) 다중성
- 다중성이란 JPA에서 다양한 연관관계 매핑을 제공하는 것을 의미합니다.
JPA에서의 모든 어노테이션은 DB와 매핑하기 위해서 존재합니다.
사실 다대다는 실무에서 쓰면 안됩니다.
가장 많이 쓰는 것은 다대일 @ManyToOne입니다.
다대일 @ManyToOne
일대다 @OneToMany
일대일 @OneToOne
다대다 @ManyToMany
(2) 단방향, 양방향
- 테이블
-> 테이블은 외래 키 하나로 양쪽으로 조인이 가능합니다.
따라서 사실 방향이라는 개념이 없습니다.
- 객체
-> 참조용 필드가 있는 쪽으로만 참조가 가능합니다.
한 쪽만 참조하면 단방향이고, 양쪽이 서로 참조하면 양방향입니다.
사실 객체 입장에서 보면, 양방향은 단방향이 2개가 있는 것입니다.
(3) 연관관계의 주인
- 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺습니다.
반면, 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데입니다.
객체 양방향 관계는 참조가 2군데 있으므로,
둘 중 테이블의 외래키를 관리할 곳을 정해야 합니다.
- 즉, 연관관계의 주인은 외래키를 참조하는 것입니다.
주인의 반대편은 외래 키에 영향을 주지 않고, 단순 조회만 가능합니다.
2) 다대일(N:1)
- 다대일은 JPA에서 가장 많이 사용하고, 꼭 알아야 합니다.
다대일의 반대는 일대다 입니다.
[다대일 단방향]
[다대일 양방향]
- 다대일 양방향은 반대쪽에 추가하면 되고,
반대쪽에 추가한다고 테이블에 영향을 미치지는 않습니다.
외래 키가 있는 쪽이 연관관계의 주인이며,
양쪽을 서로 참조하도록 개발합니다.
3) 일대다(1:N)
[일대다 단방향]
- 여기서는 1이 연관관계의 주인입니다.
즉, 다쪽에 외래키가 있습니다.
단, DB 입장에서는 다 쪽에 외래키가 들어가야 합니다.
또한, JoinColumn을 반드시 사용해야 합니다.
3-1) 일대다 단방향 매핑의 단점
(1) 엔티티가 관리하는 외래 키가 다른 테이블에 있습니다
(2) 연관관계 관리를 위해 추가로 UPDATE SQL을 실행해야 합니다.
-> 결론적으로, 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용해야 합니다.
참고
김영한 자바 ORM 표준 프로그래밍 기본편
'자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] N+1 문제 (0) | 2024.12.12 |
---|---|
다양한 연관관계 매핑(2) (일대일, 다대다) (0) | 2022.09.11 |
연관관계 매핑 기초 (0) | 2022.09.07 |
엔티티 매핑 - 객체와 테이블 매핑 & 데이터베이스 스키마 자동 생성 (0) | 2022.08.31 |
플러시 & 준영속 상태 (0) | 2022.08.31 |