다양한 연관 관계 매핑

연관 관계 매핑 시 고려 사항 3가지

  • 다중성

  • 단방향, 양방향

  • 연관 관계의 주인

다중성

  • @ManyToOne

  • @OneToMany

  • @OneToOne

  • @ManyToMany

JPA 애너테이션은 DB와 매핑하기 위해 쓰는 것이기 때문에, 데이터베이스 관점에서의 다중성을 고민하면 된다.

다중성이 애매할 때는 반대쪽을 생각하면 된다. 회원과 팀이 있다면 반대로 팀과 회원의 관계를 생각해보면 된다. 일대일의 반대는 일대일, 일대다의 반대는 다대일, 다대다의 반대는 다대다로 대칭성이 있기 때문이다.

참고로 다대다는 실무에서 쓰지 않는다. 다대일 > 일대다 > 일대일 순으로 많이 쓴다.

단방향, 양방향

테이블은 외래키 하나로 양쪽 조인을 할 수 있어서 방향이라는 개념이 없다. 하지만 객체는 참조용 필드가 있는 쪽으로만 참조할 수 있다. 한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이다. 하지만 양방향이란 단방향이 2개 존재하는 것일 뿐이다.

연관 관계 주인

테이블은 외래키 하나로 두 테이블이 연관 관계를 맺는다. 객체의 양방향 관계는 A->B, B->A처럼 참조가 두 곳이다.

객체 양방향 관계는 참조가 2개이기 때문에 테이블의 외래 키를 관리할 곳을 둘 중에 정해야 한다. 여기서 연관 관계의 주인은 외래 키를 관리하는 참조다. 주인의 반대편은 외래 키에 영향을 주지 않는다. 단순 조회만 가능하다.

Last updated