728x90
반응형
mappedBy 란?
양방향 연관관계에서 중요한 역할을 한다.
양방향 관계를 위한 맵핑을 해주는 역할을 한다.
양방향 연관관계 예제
다음과 같은 관계가 있다면 어떻게 풀어야 될까?
mappedBy를 이해하기 위해선 객체와 테이블이 관계를 맺는 차이를 알아야한다.
객체와 테이블이 관계를 맺는 차이
객체 연관관계(2개의 연관관계가 존재)
- 회원 -> 팀 관계를 볼때 1개의 연관관계가(단방향) 있다.
- 팀 -> 회원 관계를 볼때 1개의 연관관계가(단방향) 있다.
테이블 연관관계(1개의 연관관계가 존재)
- 회원 <-> 팀의 연관관계 1개(양방향)
- FK로 양쪽다 접근이 가능하므로 연관관계는 1개만 있다.
객체의 양방향 관계
객체의 양방향 관계는 서로 다른 단방향 관계 두개이다.
- A 객체가 B의 객체를 필드로 가지고 있다.
- B 객체가 A의 객체를 필드로 가지고 있다.
class A {
B b;
}
class B {
A a;
}
테이블의 양방향 연관관계
FK 하나로 양방향 연관관계 를 가진다.
SELECT *
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
SELECT *
FROM TEAM T
JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID
연관관계의 주인
객체와 테이블의 양방향 관계가 어떻게 이뤄지는 지 보았다.
그럼 다음과 같은 의문점이 생긴다.
만일 Member의 Team을 바꾸고 싶다면?
- Member 객체의 Team을 바꿔야할까?
- Team의 Members를 바꿔야 할까?
- DB 입장에서는 MEMBER 테이블의 TEAM_ID(FK) 만 바뀌면 된다.
- 객체입장에서는
양방향이 되면서 Member의 team 과 Team의 member 둘다 신경을 써야 한다.
연관관계 주인 규칙
- 객체의 관계중 하나는 연관관계 주인으로 지정해야 된다.
- DB 입장에서 외래키가 있는 곳을 주인으로 하면된다.
- 주인은 mappedBy 속성을 사용하지 않는다.
- 주인이 아니면 mappedBy를 속성으로 주인을 지정해준다.
누가 주인이 될것인가?
- 외래키가 있는 곳을 주인으로 지정한다.
- Member.team이 연관관계 주인이 된다.
- Team.members는 읽고 쓰기만 한다(Read Only).
간단한예제
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
team.getMembers().add(member);
//연관관계의 주인에 값 설정
member.setTeam(team); //**
em.persist(member);
참고:
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21697?speed=1&tab=community&q=266753
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] 연관관계 매핑기초5: 예제 (0) | 2021.08.04 |
---|---|
[JPA] 연관관계 매핑기초4: 정리 (0) | 2021.08.03 |
[JPA] 연관관계 매핑기초3: 양방향 사용시 주의점 (0) | 2021.08.02 |
[JPA] 연관관계 매핑기초2: 양방향 연관관계 (0) | 2021.08.02 |
[JPA] 연관관계 매핑기초1: 단방향 연관관계 (0) | 2021.08.01 |
댓글