연관관계 매핑시 고려사항 3가지
- 다중성
- 단방향, 양방향
- 연관관계의 주인
다중성
- 다대일 : @ManyToOne
- 일대다 : @OneToMany
- 일대일 : @OneToOne
- 다대다 : @ManyToMany - 보통 실무에서는 쓰면 안되는 것
단방향, 양방향
테이블
- 외래 키 하나로 양쪽 조인 가능
- 사실 방향이라는 개념이 없음
객체
- 참조용 필드가 있는 쪽으로만 참조 가능
- 한쪽만 참조하면 단방향
- 양쪽이 서로 참조하면 양방향 - 사실 양방향이라기 보다는 용어일 뿐이고 객체입장에서는 방향이 하나인 셈이다.
연관관계의 주인
- 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음
- 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데
- 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야함
- 연관관계의 주인 : 외래 키를 관리하는 참조
- 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 가능
관계에는 여러가지 방식이 있음 -> 다대일, 일대다, 일대일, 다대다
다대일 : 대부분 이 방식을 추천한다. JPA를 통해 명확하게 처리할 수 있는 방법
일대일 : 외래키가 어느방향에 넣던지 간에 일대일 관계로 연관관계가 형성된다.
- DBA 입장에서는 테이블 관계에서처럼 Member와 Locker로 했을 경우 Locker에 외래키를 들고있는 것을 선호
- 객체지향적 개발자 입장에서는 Member에 외래키를 들고있는 것을 선호한다. 이유는 Member에서 Locker까지 모두 처리할 수 있기 때문이다.
- DBA와의 원활한 협의를 통해 방향을 지정하는 것이 중요하다.
하지만 JPA에서 사용할 경우에는 되도록 다대일 관계로 해서 사용하길 추천한다.
특히나 일대다나 다대다 같은경우는 되도록 사용하지 않아야 한다.
'Dev > JPA' 카테고리의 다른 글
프록시와 연관관계 관리 (0) | 2020.08.08 |
---|---|
JPA 상속관계 매핑 (0) | 2020.07.30 |
연관관계 매핑 기초 (0) | 2020.07.15 |
엔티티 매핑 (0) | 2020.07.12 |
JPA내부 구조(영속성 관리) (0) | 2020.07.06 |