JPA - Entity 연관 관계 매핑

mangez_js·2024년 6월 18일

Study

목록 보기
4/47

Entity 연관 관계 매핑


연관 관계 매핑 종류

  • 일대일(1:1) - @OnetoOne

    하나의 Entity가 하나의 Entity를 가질 때 사용된다.
    Ex) 하나의 사용자(User)는 하나의 프로필(Profile)을 가질 수 있다.

  • 일대다(1:N) - @OneToMany

    하나의 Entity가 복수의 Entity를 가질 때 사용된다.
    Ex) 하나의 부서(Department)는 여러 직원(Employee)을 가질 수 있다.

  • 다대일(N:1) - @ManytoOne

    다수의 Entity가 한 개의 Entity를 참조할 때 사용된다
    Ex) 여러 직원(Employee)은 하나의 부서(Department)를 속할 수 있다.

  • 다대다(N:M) - @ManyToMany

    다수의 Entity가 다수의 Entity를 참조할 때 사용된다.
    Ex) 여러 학생(Student)이 여러 과목(Subject)를 수강할 수 있다.

연관 관계 매핑 방향

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

일대일 단방향


일대일 단방향 매핑

  • cart -> member

다대일 단방향


다대일 단방향 매핑

  • cart <- cart_item -> item
  • 하나의 장바구니에는 여러 아이템이 존재, 하나의 아이템은 여러 장바구니에 존재

양방향 매핑


연관 관계 주인

  • 엔티티를 양방향으로 연관 관계를 설정하면 객체의 참조는 둘인데 외래키는 하나
  • 연관 관계 주인 규칙
  • 연관 관계의 주인은 외래키가 있는 곳으로 설정
  • 연관 관계의 주인이 외래키를 관리(등록, 수정, 삭제)
  • 주인이 아닌 쪽은 연관 관계 매핑 시 mappedBy 속성 값 지정
  • 주인이 아닌 쪽은 읽기만 가능

양방향 매핑

  • member <- order ⇄ order_item
  • 한 명의 회원은 여러 번 주문 가능, 한 번의 주문에 여러 개의 상품을 주문 가능

다대다 매핑


다대다 매핑

  • 실무에서는 사용되지 않음(연결 테이블에는 컬럼을 추가할 수 없음)
  • 1:N ⇄ N:1 형태로 교차 엔티티를 사이에 둠
  • @ManyToMany 코드

0개의 댓글