🚨 연관관계 매핑시 고려해야 할 사항 3가지
- 다중성
- 방향성(단방향, 양방향)
- 연관관계의 주인
다중성이란?
다중성은 대칭성이 있다.([N:1]의 반대는 [1:N])
주의할 점은 다대다 관계는 거의 사용되지 않는다!(실무에서 쓰면 안됨)
- 다대일 : @ManyToOne
- 일대다 : @OneToMany
- 일대일 : @OneToOne
- 다대다 : @ManyToMany
방향성이란?
테이블
- 외래키(FK) 양쪽 조인이 가능하다.(테이블에서는 방향이라는 개념이 없다.)
객체
- 참조용 필드가 있는 족으로만 참조 가능
- 한쪽만 참조하면 단방향
- 양쪽이 서로 참조하면 양방향(사실상 단방향이 2개 있는 것)
연관관계의 주인
- 테이블의 경우 외래키 하나로 두개의 테이블이 연관관계를 맺음
- 객체의 양방향은 위에서 말한 것처럼 단방향 2개로 이루어져 있음
- 연관관계의 주인은 외래키를 관리하는 참조이다.
- 연관관계의 주인이 아닌 객체는 조회만 가능하다.
📌 다대일(N : 1)
다대일 단방향
- 가장 많이 사용하는 연관관계이다.
- 다대일(N:1)의 반대는 일대다(1:N)
다대일 양방향
- 외래키가 있는 쪽이 연관관계의 주인이다.
- 연관관계에 있는 객체가 서로를 참조하도록 개발
📌 일대다(1 : N)
일대다 단방향
- 일대다(1:N) 연관관계에서 일(1) 쪽이 연관관계의 주인이 된다.
- 테이블에서는 다(N) 쪽에 외래키가 있다.
- @JoinColumn을 꼭 사용해야 한다. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 연결 테이블을 하나 추가함)
📌 일대일(1 : 1)
다대일 연관관계와 유사
차이점이 있다면 두 개의 객체 모두 연관관계의 주인이 될 수 있고 테이블의 유니크 제약조건을 가져야 한다.