객체는 참조로 연관된 객체를 찾고
테이블은 외래키로 조인을 통해 연관된 테이블을 찾는다.
양방향 연관관계
-> 팀과 멤버를 생각할 때 멤버를 보고 팀을 찾는 것과 팀을 보고 멤버를 찾는 두가지가 모두 되는 관계를 말한다.
객체
객체를 양방향으로 참조하려면 단방향 연관관계가 2개를 만들어야한다.
이것을 양방향 연관관계라고 이름 붙였다
팀 -> 멤버
멤버 -> 팀
테이블
테이블은 하나의 FK를 이용해 두 테이블이 연관관계를 관리한다. (양쪽으로 join가능)
-> 연관관계가 1개 있다.
회원 <-> 팀
<Team 엔티티 코드에 추가>
@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<Member>();
팀 입장에서 보면 Team이 1이고 Member가 N이므로 @OneToMany 어노테이션을 붙여준다.
mappedBy를 통해 Member의 어느 필드와 매핑되었는지 알려준다.
"team"은 Member에 있는 필드명이다.
그런데..!!
Member에도 Team이 있고
Team에도 members가 있다.
그러면 어떻게 연결을 해야 올바르게 연동이 될까?
둘 중 하나를 외래 키로 관리하면 된다.
연관관계의 주인 (Owner)
객체의 두 관계중 하나를 연관관계의 주인으로 지정한다
- 연관관계의 주인만이 외래 키를 관리 (등록, 수정)
- 주인이 아닌쪽은 읽기만 가능
mappedby가 설정된 것은 주인이 아니다.
주인이 아닌 필드가 mappedBy 속성을 통해 주인을 지정한다.
그러면 누구를 주인으로 해야하지?
=> 외래 키가 있는 곳을 주인으로 정해라 (DB 입장에서는 N(다)이 FK)
N쪽이 연관관계의 주인
양방향 연관관계의 경우 순수 객체 상태를 고려해서 양쪽에 값을 설정하자.
-> 연관관계 편의 메서드를 생성하자. ( 메서드는 1개만) [ 잊어먹을 수 있으니까]
단방향 매핑을 잘하고 양방향은 필요할 때 추가!
처음에는 일단 단방향 매핑으로 설계를 끝내라!
양방향 매핑은 반대 방향으로 조회기능이 추가된 것 뿐
'개발공부 > [Spring]김영한_ORM표준 JPA프로그래밍' 카테고리의 다른 글
[애플리케이션 개발]persistence_entityManagerFactory, 엔티티 생성 (0) | 2022.08.23 |
---|---|
[spring]JPQL이 뭔가요?(파라미터와 select) (0) | 2022.08.18 |
[spring]단방향 연관관계 (0) | 2022.08.18 |
[매핑 어노테이션]@Entity, @Table, @Enumerated, @Id, @GeneratedValue, @Temporal,@Lob (0) | 2022.08.18 |
플러쉬(flush)란? (0) | 2022.08.18 |