다양한 연관관계에 대해 알아보자.

Many To One

주로 다대일을 실무에서 가장 많이 사용한다.

  • 단방향 : 실무에서 가장 많이 사용하는 형태의 연관관계.
  • 양방향 : 객체 입장에서는, 단방향이 2개가 연결된 연관관계가 된다.
    • 역방향을 추가한다고 해서, 테이블 입장에서 변화가 있지는 않다.
    • 당연히 역방향은 일대다(One to many)가 된다.

One To Many

실무에서 거의 사용하지 않는다.
다대일과 다르게, 일(1) 이 연관관계의 주인이 된다.
항상 다(N) 쪽에 외래 키가 존재한다.
객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이구조가 된다.
@JoinColumn을 쓰지 않으면, 자동으로 JoinTable을 써버린다. (테이블 하나 더 생김)

  • 단점
    • Entity가 관리하는 외래 키가 다른 테이블에 있다.
    • 연관관계를 관리하기 위해 다른 테이블에 Update Query가 추가로 실행된다.

다대일 양방향 매핑을 사용하기를 지향하자!

One To One

특이하게, 주 테이블이나 대상 테이블 중에 외래 키를 어디에 넣어도 상관이 없다.
이럴 땐 외래 키에 DB Unique 제약조건이 반드시 추가되어야 한다.

Annotation만 다르지, 다대일 단방향 매핑과 유사하다!
다대일과 마찬가지로, 외래키가 존재하는 곳이 주인이 된다.

Many To Many

웬만하면 실무에서 쓰면 안되는 연관관계이다.
RDB는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다!
굳이하려면, 연결 테이블을 추가해서 일대다 <-> 다대일 관계로 풀어내야 한다.

하지만 객체는 Collection을 사용해서 객체 2개로 다대다 관계가 가능하다.
다대다의 한계를 극복하려면, 연결 테이블용 Entity를 굳이 하나 더 만들면 된다.