-
JPA 연관 관계 매핑개발 2022. 8. 2. 23:12
연관 관계 매핑 시 고려사항
다중성 (데이터베이스 관점의 다중성)
- 다대일 @ManyToOne
- 일대다 @OneToMany
- 일대일 @OneToOne
- 다대다 @ManyToMany
단방향, 양방향, 테이블, 객체
연관관계의 주인
- 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.
- 객체의 양방향 관계는 a -> b , b -> a 처럼 참조가 2군데
- 객체 양방향 관계는 참조가 2군데가 존재, 둘중 테이블의 외래 키 관리할 객체를 지정해야한다.
연관관계의 주인 : 외래 키를 관리하는 참조
주인의 반대편 : 외래 키에 영향을 주지않고 단순 조회만 가능함.
다대일 관계 [N:1]
항상 다수의쪽에 외래 키가 존재해야 한다 -> 아니면 잘못 설계 한것.
일대다 관계 [1:N]
일대다 단방향은 일대다 (1:N)에서 1이 연관관계의 주인이 되는 관계
실무에서 거의 잘 사용 안한다고함.
테이블 일대다 관계는 항상 N쪽에 외래키가 존재한다.
객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조
@JoinColumn 사용 필수, 그렇지 않으면 Join Table 방식을 사용하게 된다(중간에 Join을 위한 테이블 생성)
Entity가 관리하는 외래 키가 다른 테이블에 존재한다는 큰 단점 존재
연관관계 관리를 위해 추가로 Update 수행
-> 일대다 단방향 매핑을 쓰기 보단 다대일 양방향 매핑을 사용해라 (객체지향적 관점에서 손해일 수도, trade off 관계)
일대일 관계 [1:1]
주 테이블이나 대상 테이블 중에 외래 키 선택 가능
- 주 테이블에 외래키
- 대상 테이블에 외래키
외래 키에 데이터베이스 유니크 제약 조건 추가한다.
일대일 관계 정리
주 테이블에 외래키
주 객체가 대상 객체의 참조를 갖는것 처럼 주 테이블에 외래키를 두고 대상 테이블을 찾는다 <- 객체지향적으로 개발, JPA 매핑 편리
장점으로 주 테이블만 조회 해도 대상 테이블에 데이터가 있는지 확인 가능 하나 단점으론 값이 없으면 외래키에 null 값 허용하게 됨
대상 테이블에 외래키
대상 테이블에 외래키가 존재, 전통적으로 데이터베이스 개발자가 선호하는 방식
장점으로 주 테이블과 대상 테이블을 일대일에서 일대다로 변경할 시 테이블 구조가 유지되지만 단점으로 프록시 기능의 한계로 인해 지연 로딩으로 설정해도 항상 즉시로딩 된다.
'개발' 카테고리의 다른 글
Gradle 기본 정리 (0) 2022.12.21 Effective Java Study - 1 (1) 2022.09.08 Index (2) (0) 2022.07.05 Index (1) (0) 2022.06.29 Docker - 1 (0) 2021.06.14