-
Spring boot - 연관 관계 매핑공부/Spring 2023. 12. 6. 14:17
*연관 관계 매핑 종류
- 일대일(1 : 1) @OneToOne
- 일대다(1 : N) @OneToMany
- 다대일(N : 1) @ManyToOne
- 다대다(N : M) @ManytoMany
*방향성 : 테이블 관계는 항상 양방향 이지만 객체세서는 단방향 양방향이 존재한다
단방향 : 한쪽에만 관계를 맺어 관계를 맺은 테이블에 정보를 Join해서 가져올 수 있다
양방향 : 양쪽에서 모두 관계를 만들어 어느쪽에서 조회를 해도 Join해서 정보를 가져온다
- 일대일 단방향
Cart -> Member
- Cart에 Member의 OnoToOne 관계를 만든다
- Member는 변화 없다
- Cart조회시 해당 Member의 정보를 가져올 수 있다
-FetchType.EAGER, 즉시로딩 : 데이터를 조회할 때 매핑된 entity도 한번에 조회가 된다

- 다대일 단방향
cart(1) : (N) cart_item (1) : (1) item
- cart_item에 cart_id 와 item_id를 ManyToOne 관계를 만든다

- 다대일/일대다 양방향 : 단뱡향 매핑이 2개가 있다고 생각하면 된다 단, 주인 관계설정이 추가 된다
orders - > order_item = 1 : N
- orders는 order_item을 여러게 가지고 있는 관계이다

- order_item은 orders를 ManyToOne 관계를 만든다
- orders는 order_item을 여러게 가가지게 되니 OneToMany 관계를 만든다 여기서는 mappedBy를 사용한다

*연관 관계 주인 설정
- 테이블 에서는 order_id를 외래키로 조인을 하면 모든 정보를 불러와 지는 양방향 조회가 된다
- 하지만 엔티티는 다르다
- 엔티티에서는 양방향 연관 관계 설정시 한쪽에 외래키 주인 설정을 해야한다
*설정조건
- 연관 관계의 주인은 외래키가 있는 곳으로 설정
- 연관 관계의 주인이 외래기를 관리(등록, 수정, 삭제)
- 주인이 아닌 쪽은 연관 관계 매핑 시 mappedBy 속성의 값으로 연관 관계의 주인을 설정
- 주인이 아닌 쪽은 읽기 만 가능
*주의사항
무조건 양방향 연관 관계를 매핑하면 해당 엔티티에 많은 연관 관계를 맺게되어 클래스가 복잡해진다
단뱡향 연결 후 필요시 양방향 추가 권
- 다대다는 일대다 다대일 관계로 풀어낸다
'공부 > Spring' 카테고리의 다른 글
Spring boot - 지연 로딩 (0) 2023.12.06 Spring boot - 영속성 전이(cascade) (0) 2023.12.06 Spring boot - 권한 (0) 2023.12.05 Spring boot - Querydsl (0) 2023.11.27 Spring boot - JPA - 쿼리 메소드, JPQL snippet (0) 2023.11.11