Chapter 6. 다양한 연관관계 매핑

엔티티의 연관관계 매핑 시에는 다음 3가지를 고려해야 한다.

보통 다대일과 일대다 관계를 가장 많이 사용하고 다다대 관계는 실무에서 거의 사용 하지 않는다. → 이유

연관관계 주인 : JPA는 두 객체 연관관계 중 하나를 정해 DB 외래 키를 관리하는데, 이것을 연관관계의 주인이라고 한다.

보통 외래키를 가진 테이블과 매핑한 엔티티가 외래키를 관리하는게 효율적이기 때문에 보통 이곳을 연관관계 주인으로 선택한다.

(주인이 아닌 방향은 외래키를 변경할 수 없고 읽기만 가능)

mappedBy 속성을 통해 연관관계 주인이 아닌 쪽에 표시한다. + 주인 필드 이름을 값으로 입력

다대일

외래키는 항상 다 쪽에 있음.

무한루프 체크 하는 로직이 이해가 안감

일대다

→ 외래키를 다 쪽이 아닌 일 쪽에서 관리하면서 생기는 단점 : 매핑한 객체가 관리하는 외래키가 다른 테이블에 있다. 따라서 INSERT SQL 한번으로 끝낼 수 있는 것이 다른 테이블에 외래키가 있기 때문에 연관관계 처리를 위한 UPDATE SQL을 추가로 실행해야한다.

(단방향일 경우 Member는 Team을 모른다)

따라서 Member 엔티티 저장할 때 Member 테이블의 TEAM_ID에 아무 값 저장안 된다. 대신 TEAM 엔티티 저장 시 Team.members 참조 값 확인해서 회원 테이블에 있는 TEAM_ID 외래 키를 업데이트한다.