김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢

다양한 연관관계 매핑

엔티티의 연관관계 매핑 시 고려할 3가지

  • 다중성
  • 단방향, 양방향
  • 연관관계의 주인

다중성

  • 다대일(@ManyToOne)
  • 일대다(@OneToMany)
  • 일대일(@OneToOne)
  • 다대다(@ManyToMany)

💡Tip. 다대다 관계를 실무에서 사용하지 않는 이유

다대다 관계는 테이블을 구성할 때 사용할 수는 있지만 거의 절대적으로 피하는 것이 좋다.

Why? 이유는 다대다 관계를 사용하면 필연적으로 데이터의 무결성을 위반하게 되며, 데이터의 삭제와 추가, 수정을 할 때 많은 문제가 발생하기 때문이다. 예를 들어 학생과 선생의 다대다 관계를 생각해보면, 한명의 학생은 여러 선생에게 수업을 들을 수 있고, 한명의 선생은 여러 학생을 가르칠 수 있다. 학생과 선생을 서로 연결해서 수업의 시작일과 종료일을 기록해야 한다고 가정했을 때 수업의 시작일과 종료일을 학생 테이블에 넣을 지, 아니면 선생 테이블에 넣을 지 혼돈이 발생한다. 어느 테이블에 넣더라도 데이터의 무결성을 해치게 되고, 위에서 언급했듯이 데이터를 수정해야 할 경우에도 많은 문제가 발생하게 된다.

단방향, 양방향

  • 테이블은 외래 키 하나로 조인을 사용해서 양방향으로 쿼리가 가능하므로 사실상 방향이라는 개념이 없음
  • 반면 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회하므로 방향 개념이 있음
  • 때문에 양방향의 필요성은 객체를 사용함에 있어의 필요성과 같다.

연관관계의 주인

  • 외래 키를 가진 테이블과 매핑한 엔티티가 외래 키를 관리하는게 효율적이므로 보통 이곳을 연관관계의 주인으로 선택함
  • 주인이 아닌 방향은 외래 키를 변경할 수 없고 읽기만 가능
  • 연관관계의 주인은 mappedBy 속성을 사용하지 않음
  • 연관관계의 주인이 아니면 mappedBy속성을 사용하고 연관관계의 주인 필드 이름을 값으로 입력해야 함

다중성과 단뱡향, 양방향을 고려한 가능한 모든 연관관계

  • 다대일 : 단방향, 양방향
  • 일대다 : 단방향, 양방향
  • 일대일 : 주 테이블 단방향, 양방향
  • 일대일 : 대상 테이블 단방향, 양방향
  • 다대다 : 단방향, 양방향

JPA 카테고리 내 다른 글 보러가기

댓글남기기