객체와 테이블이 관계를 맺는 차이
객체 연관관계 = 2개
회원 -> 팀 연관관계 1개(단방향) 회원에 팀의 참조값을 넣어두어야함
팀 -> 회원 연관관계 1개(단방향) 팀에 회원의 참조값을 넣어두어야함
객체의 양방향 관계는 사실상 양방향이아니라 단방향 관계 2개이다. 근데 억지로 양방향이라고 부르는거
테이블 연관관계 = 1개
회원 <-> 팀의 연관관계 1개 (양방향)
pk와 fk로 서로 왔다갔다 할 수 있음.
둘 중 하나로 외래 키를 관리 해야 한다.
양방향 매핑 규칙
- 객체의 두 관계중 하나를 연관관계의 주인으로 지정 (Member에 있는 team이 주인이 될건지 Team에 있는 members가 될건지 정해야함)
- 연관관계의 주인만 외래키를 관리(등록, 수정) 만약 members가 주인이 아니라면 members에 아무리 값을 넣어 봤자 아무일도 일어나지 않는다. 조회만 가능.
- 주인이 아닌쪽은 읽기만 가능.
- 주인은 mappedBy속성 사용 X 예를 들면 주인을 Member에 있는 team으로 정하면 @OneToMany(mappedBy = "team”) 속성을 쓸수 없다.
- 주인이 아니면 mappedBy 속성으로 주인 지정
누구를 주인으로? - 외래 키가 있는 곳을 주인으로 정한다.
- 위에서는 Member에 team 이 연관관계의 주인.
- N : 1 인 경우 N이 주인으로 정한다.
1) 1 : 1 : 한 유저는 하나의 주소를 가진다
2) 1 : N : 한 권의 책은 여러 개의 리뷰를 가질 수 있다.
3) N : N : 한 유저는 여러 권의 책을 예약할 수 있고, 한 권의 책은 여러 명의 유저에게 대여될 수 있다.
객체 양방향 매핑시 양쪽에 값을 세팅 해주어야한다.
팁.
컨트롤러에서 엔티티객체를 반환할때 만약 엔티티가 변경되면 그대로 json으로 변환되어서 반환해버리면 기존에 있던 api스펙에 맞지 않게 되므로 왠만하면 엔티티를 DTO로 변환해서 반환해주는게 좋다.
양방향 매핑 정리
- 단방향 매핑만으로도 이미 연관관계 매핑은 완료.
- 양방향 매핑은 반대 방향으로 조회 기능이 추가된 것 뿐
- JPQL에서 역방향으로 담색할 일이 많음
- 단방향 매핑을 잘하고 양방향은 나중에 필요할때 추가해도 됨. (테이블에 영향을 주지 않음)
'JPA' 카테고리의 다른 글
Embedded Type (0) | 2022.10.19 |
---|---|
테이블 전략 (0) | 2022.10.18 |
IDENTITY전략 (0) | 2022.10.17 |
영속 컨텍스트 (1) | 2022.10.15 |
JPA 준비 (1) | 2022.10.14 |