General/JPA

[JPA] 연관관계 주인이란?

개발자겨려 2025. 5. 7. 17:21

✅ 결론부터 말하자면

  • 연관관계의 주인 외래 키를 직접 가지므로, 해당 테이블에 외래 키 컬럼이 존재함.
  • 연관관계의 주인이 아닌 쪽은 외래 키 컬럼이 테이블에 존재하지 않는다.
@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;

    @ManyToOne
    @JoinColumn(name = "team_id") // 외래 키가 있는 쪽 → 연관관계의 주인
    private Team team;
}

@Entity
public class Team {
    @Id @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "team") // 주인이 아님 (읽기 전용)
    private List<Member> members = new ArrayList<>();
}

🔎 이 경우 DDL을 보면:

  • member 테이블에는 team_id라는 외래 키 컬럼이 생성. ✅
  • team 테이블에는 아무런 외래 키 컬럼이 없다.

 

✅ 연관관계 주인의 역할

  • 연관관계의 주인만이 외래 키 값을 변경(등록/수정/삭제)할 수 있다. ( 테이블에 존재하는 컬럼이니까 변경 가능 )
  • 반대편(연관관계의 주인 X), 외래 키에 영향을 주지 못하고 읽기 전용이다.

 

💡 그래서 실제로 JPA에서 데이터 변경을 하려면?

  • 연관관계의 주인 쪽에서만 수정/등록/삭제가 가능.
    예: member.setTeam(team) 으로 연관관계 설정해야 team_id가 DB에 반영됨.
    반대로 team.getMembers().add(member)만 하면 아무런 DB 반영이 안 됨.

 

 

 

 

 

 

다음 게시물에서는 PA에서 연관관계와 관련된 중요한 옵션 중 하나인 orphanRemoval에 대해서 공부하기!

'General > JPA' 카테고리의 다른 글

JPA, Hibernate, spring Data JPA  (0) 2025.05.09
[JPA] orphanRemoval vs CascadeType.REMOVE 정리  (1) 2025.05.07