다중성
다중성은 두 엔티티 간의 관계에서 나타나는 데이터의 수를 의미한다.
다대일(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 |