본문 바로가기

Back-End/JPA

JPA 연관관계 Mapping(2)

다중성

다중성은 두 엔티티 간의 관계에서 나타나는 데이터의 수를 의미한다.


다대일(N:1)

  • 가장 많이 사용
  • 예시 : 하나의 카테고리에 여러 상품이 속할 때.
  • 단방향
    • @ManyToOne을 사용하여 매핑
    • 외래 키는 쪽 테이블에 생성
  • 양방향
    • 외래 키가 있는 테이블이 연관관계 주인
    • 주인이 아닌 엔티티는 mappedBy를 사용해 참조
    • 양쪽에서 서로를 참조하도록 구현.

 


일대다(1:N)

  • 일대다 단방향
    • @OneToMany를 사용하여 매핑
    • 1이 연관관계 주인이지만, 실제 테이블은 항상 다 쪽에 외래 키를 둠.
    • 데이터 변경 시 다 테이블도 영향을 받아 복잡도 증가
    • 실무에서는 거의 사용되지 않음. 다대일 양방향 매핑 사용 권장.
  • 일대다 양방향
    • 이런 매핑은 공식적으로 존재X
    • 다대일 양방향을 사용하자

일대일(1:1)

  • @OneToOne을 사용하여 매핑
  • 외래 키는 주 테이블 또는 대상 테이블 중 하나에 위치할 수 있다.
  • 외래 키에 유니크 제약 조건을 추가해 일대일 관계를 보장
  • 매핑은 다대일 단방향 매핑과 비슷하게 설정.

다대다(N:M)

  • (이건 실무에서 쓰면 안됨)
    • @ManyToMany를 사용하면 JPA가 중간 테이블을 자동으로 생성함.
    • 하지만 중간 테이블에 추가 정보를 저장해야 하는 경우가 많아, 다대다 대신 중간 엔티티를 생성해 다대일/일대다 관계로 푼다.

단방향, 양방향

  • 테이블 
    • 외래 키 하나로 양쪽 조인 가능
    • 사실 방향이라는 개념이 없음
  • 객체
    • 참조용 필드가 있는 쪽으로만 참조 가능
    • 한쪽만 참조하면 단방향
    • 양쪽이 서로 참조하면 양방향(풀어서 쓰면 사실 양방향이란 것이 없다. 참조 입장에서 보면 단방향이 2개이다.)

연관관계 주인

  • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음
  • 객체 양방향 관계는 A -> B, B -> A 처럼 참조가 2군데
  • 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야함.(보통 N(다) 쪽이 주인)
  • 연관관계의 주인 : 외래 키를 관리하는 참조
  • 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회용

'Back-End > JPA' 카테고리의 다른 글

프록시와 연관관계 관리(JPA)  (0) 2024.12.17
상속관계 매핑(JPA)  (0) 2024.12.17
JPA 데이터베이스 스키마 자동 생성과 주의점  (1) 2024.12.13
JPA 연관관계 Mapping  (0) 2024.12.10
JPA - Entity 만들기  (0) 2024.12.10