* 개요
연관관계를 정하기 위해서는 단방향인지 양방향인지, 연관관계의 주인이 어디인지를 먼저 고려해야 합니다.
* 1:N 단방향
Team : Member가 1: N 관계를 가지고 있으며, Team에서 외래키를 관리하는 연관관계의 주인인 경우입니다.
외래키를 관리하는 Team 객체를 기준으로 보면, Member가 N이므로 TEAM_ID 외래키를 가지고 있습니다. Team 객체가 연관관계 주인이므로, List members로 Member 객체를 참조합니다. 이는 객체와 테이블의 차이로 반대편 테이블의 외래키를 관리하는 특이한 경우입니다.
하지만, Member는 Team의 어떠한 정보도 참조하지 않습니다. 연관관계의 주인이 아니기 때문입니다. List members로만 서로의 객체 수정이 가능합니다.
* 1:N 양방향
1 : N 양방향은 기존 단방향에서 Member 객체에 Team team이 추가되었습니다. 연관관계 주인은 Team이기 때문에, Member 객체의 Team team은 단순히 조회밖에 할 수 없습니다. 이 team을 이용해서 객체를 수정해도 반영되지 않습니다. 연관관계 주인인 Team이 가지고 있는 List members를 통해서만 가능합니다.
외래키가 다른 테이블에 있기 때문에, 연관관계 관리를 위해서 추가적인 UPDATE SQL 쿼리가 필요합니다. 또한 Mmeber 객체가 가지고 있는 Team team에 @JoinColumn(insertable=false, updatable=false)을 해주어, 읽기 전용으로 만들어주어야 하는 복잡하고 억지스러운 방식을 사용하게 됩니다. 따라서 1 : N보다는 N : 1 방식을 사용하도록 합니다.
* 참고
'Spring > Spring JPA' 카테고리의 다른 글
연관관계 매핑 (0) | 2021.09.10 |
---|---|
N:1 테이블 관계 설계하기 (0) | 2021.09.07 |
1:1 테이블 관계 설계하기 (0) | 2021.09.07 |
Entity (2) | 2021.09.05 |
JPA 영속성 컨텍스트 (0) | 2021.08.30 |