✅ 결론부터 말하자면
- 연관관계의 주인은 외래 키를 직접 가지므로, 해당 테이블에 외래 키 컬럼이 존재함.
- 연관관계의 주인이 아닌 쪽은 외래 키 컬럼이 테이블에 존재하지 않는다.
@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 |