Entity 연관 관계 매핑

Codren·2021년 9월 26일
0

Spring Boot 쇼핑몰

목록 보기
15/32

Section 1. Entity 연관 관계 매핑

1. 연관 관계 매핑 종류

    ① 일대일(1:1) - @OneToOne
    ② 다대일(N:1) - @ManyToOne
    ③ 일대다(1:N) - @OneToMany
    ④ 다대다(N:M) - @ManyToMany




2. 연관 관계 매핑 방향

  • 데이터베이스 중심 설계 테이블에서 관계는 항상 양방향
  • JPA 객체지향 중심 설계에서는 단방향, 양방향 존재



Section 2. 일대일 단방향

1. 일대일 단방향 매핑

  • cart ⟶ member
  • Cart (장바구니) Entity 생성
  • cart 테이블 생성
  • cart 테이블 생성 후 alter 명령어로 외래키(FK) 지정




2. CartRepository

  • 장바구니 조회를 위한 Repository




3. 장바구니 조회 테스트 (즉시로딩)

  • 장바구니 조회 테스트 클래스 생성 및 DI

  • cart 조회 결과에서 member 정보 추출

  • Cart 엔티티를 조회할 때, 매핑된 엔티티도 한 번에 조회 (=즉시 로딩)



Section 3. 다대일 단방향

1. 다대일 단방향 매핑

  • cart ⟵ cart_item ⟶ item
  • 하나의 장바구니에는 여러 아이템이 존재, 하나의 아이템은 여러 장바구니에 존재
  • CartItem Entity 생성
  • cart_item 테이블 생성
  • cart_item 테이블 생성 후 alter 명령어로 각각 외래키(FK) 지정



Section 4. 양방향 매핑

1. 연관 관계 주인

  • 엔티티를 양방향으로 연관 관계를 설정하면 객체의 참조는 둘인데 외래키는 하나

  • 연관 관계 주인 규칙
    - 연관 관계의 주인은 외래키가 있는 곳으로 설정
    - 연관 관계의 주인이 외래키를 관리(등록, 수정, 삭제)
    - 주인이 아닌 쪽은 연관 관계 매핑 시 mappedBy 속성 값 지정
    - 주인이 아닌 쪽은 읽기만 가능




2. 양방향 매핑

  • member ⟵ orders ⇄ order_item
  • 한 명의 회원은 여러 번 주문 가능, 한 번의 주문에 여러 개의 상품을 주문 가능
  • 주문 상태 enum 클래스 생성
  • Order Entity 생성
  • OrderItem Entity 생성




3. 쇼핑몰 프로젝트 ERD




Section 5. 다대다 매핑

1. 다대다 매핑

  • 실무에서는 사용되지 않음 (연결 테이블에는 컬럼을 추가할 수 없음)
  • 1:N ⇄ N:1 형태로 교차 엔티티를 사이에 둠
  • @ManyToMany 코드
public class Item {
	
    @ManyToMany
    @JoinTable(
    		name = "member_item",
            	joinColums = @JoinColumn(name = "member_id"),
                inverseJoinColumns = @JoinColumn(name = "item_id")
    )
    private List<Member> member:
}

0개의 댓글