# JPA 연관관계의 주인

양방향으로 테이블을 연결할 때 RDB와 객체 사이의 차이점이 발생한다.
RDB에서는 하나의 외래키로 양방향 연관관계를 표현할 수 있다.
축구선수와 팀의 연관관계를 생각해보자. Player와 Team은 n : 1의 관계이다.
RDB로 구현하면 Player에는 Team의 Primary key가 외래키로 들어가 있을 것이다. 하지만 Team에는 Player에 대한 정보가 없다. 필요하다면 Team과 Player Table을 조인하여 정보를 가져올 수 있다.

하지만 객체에서는 다르다. 객체는 Player에서 Team을 참조변수로 가지고 있다고 하더라도, Team에서는 Player를 List로 참조하고 있는 관계를 보여줄 것이다. 즉 단방향 연결이 두개로 이어져 있는 상태가 된다. 이렇게 되면 문제점이 생긴다. Table에서 외래키를 관리할 때, 두 변수의 변화에 대하여 어떻게 조치를 해주어야 하는 지를 결정해주어야 한다. Team도 변경되고 Player도 변경되었을 때 어디서 변경을 해줘야하는지를 알려줘야한다. 그것은 바로 mappedBy 값으로 지정해준다. mappedBy로 지정되지 않은 값이 연관관계의 주인이 되어 외래키의 수정과 삭제를 담당하게 된다.
mappedBy로 지정된 변수는 조회만 가능하게 되어 값을 아무리 변경하여도 DB에 영향을 끼치지 않게 된다.

연관관계의 주인을 누가 해야하는 지에 대한 것은 Table에서 외래키를 보유하고 있는 객체가 연관관계의 주인을 하면 된다. 즉 n:1의 관계에서는 n측이 외래키를 가지고 있으므로 n이 연관관계의 주인이 된다.