테이블은 기본적으로 양방향 참조
객체는 양방향의 경우는 임의로 양방향 참조를 구현 해주어야 한다.
따라서 객체의 양방의 경우 한쪽에 테이블의 외래키 처럼 ,외래키를 관리할 수 있는 필드를 정해 주어야함
데이터 베이스는 서로 참조할 때 외래키를 써서 참조하며, 이러한 외래키 관계가 되면 외래키 하나로 양쪽 테이블 서로 조인할 수 있다.테이블에서 한쪽에 외래키가 있기 때문에 그 테이블에서 관리하면 된다.
이에 반해 객체는 테이블과 같이 키 하나로 양방향 연관관계를 관리 할 수 없다.이러한 양방향 연관관계를 만들어 주기 위해서는 서로 다른 단방향 연관관계 2개를 만들어서 양방향인 것처럼 보이게 해주어야 한다.
단방향이라면 참조를 하나만 사용하므로 이 참조로 외래 키를 관리하면 되지만,엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데, 외래 키는 하나만 만들어서 관리해 주어야 한다.
그렇다면 , 두 엔티티중 어떤 엔티티에서 외래 키를 관리해야 할 까 ?
이때, 연결된 엔터니 중 하나를 "연관관계 주인"으로 지정하여 해당 객체가 변경될 때마다 자동으로 반영할 수 있도록 한다.결국 ,JPA에서 연관관계 주인을 정하는 것은 외래 키(Foreign Key) 관리를 위한 문제로 귀결 된다.
연관 관계의 주인만이 데이터 베이스 연관관계외 매핑되고 외래 키를 관리 (등록 ,수정,삭제)할 수 있다.반대로 주인이 아닌쪽은 읽기만 할 수 있고,mappedBy 속성을 사용한다.연관관계의 주인을 정한다는 것은 사실 외래 키 관리자를 선택하는 것이다.
데이터베이스 테이블의 다대일,일대다 관계에서는 항상 다 쪽이 외래키를 가진다
연관관계의 주인은 테이블에 외래 키가 있는 곳으로 정해야 한다.여기서는 회원 테이블이 외래 키를 가지고 있으므로 Member.team이 주인이 된다.
따라서 주인이 아닌 Team.members 에는 mappedBy(~에 의해 매핑 되었다)=”team” 속성을 사용해 ,주인이 아님을 설정한다.