[자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 6. 다양한 연관관계 매핑- 다대일 ~ 실전예제3 - 다양한 연관관계 매핑
테이블은 외래키 하나로 두 테이블이 연관관계를 맺음.
객체 양방향 관계는 참조가 2군데 있으며, 둘중 하나에 외래키를 관리할 곳을 지정해야함.
다대일(N:1)
- 단방향: 가장 많이 사용. @ManyToOne+ @JoinColumn
- 양방향: 외래 키가 있는 쪽이 주인. 양쪽을 서로 참조. 반대편에 @OneToMany(mappedBy='')
일대다(1:N)
- 단방향: 일대다에서 일이 연관관계의 주인. 테이블 일대다 관계는 항상 다 쪽에 외래키가 있음(객체와 테이블의 차이때문에 반대편 테이블의 외래키를 관리하는 특이한 구조). @OneToMany+ @JoinColumn 사용. 연관관계 관리를 위해 추가로 UPDATE SQL 실행. 일대다 단방향 매핑보다는 다대일 양방향을 권장.
- 양방향: 공식적으로 존재x. @ManyToOne + @JoinColumn(insertable=false, updatable=false)로 읽기 전용 필드를 사용해 양방향처럼 사용할 수 있음. 일대일 양방향 보다는 다대일 양방향을 권장.
일대일(1:1)
- 주 테이블에 외래키 단방향: 다대일 단방향과 유사 @OneToOne+ @JoinColumn
- 주 테이블에 외래키 양방향: 다대일 양방향처럼 외래키가 있는 곳이 주인. 반대편은 @OneToOne(mappedBy='') 적용.
- 대상 테이블에 외래키 단방향: 지원x
- 대상 테이블에 외래키 양방향: 다대일 단방향과 유사
- 주 테이블에 외래키
객체 지향 개발자 선호, JPA 매핑 편리.
장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능.
단점: 값이 없으면 외래키에 null 허용.
- 대상 테이블에 외래키
전통적인 데이터베이스 개발자 선호.
장점: 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지.
단점: 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩됨.
다대다(N:M)
- 관계형 db는 정규화된 테이블 2개로 다대다 관계 표현x. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함.
- 객체는 컬랙션을 사용해서 객체2개로 다대다 관계 가능.
- 단방향: @ManyToMany + @JoinTable로 연결 테이블 지정.
- 양방향: @ManyToMany(mappedBy='')
- 실무에서 사용x. 연결 테이블을 엔티티로 승격시켜서 사용해야함(연결 테이블용 엔티티 추가). @ManyToMany -> @OneToMany(mappedBy), @ManyToOne+@JoinColumn
'공부일기 > JPA' 카테고리의 다른 글
JPA 공부일기(9) (0) | 2023.01.30 |
---|---|
JPA공부일기(8) (0) | 2023.01.27 |
JPA공부일기(6) (1) | 2023.01.12 |
JPA공부일기(5) (0) | 2023.01.02 |
JPA 공부일기(4) (0) | 2023.01.01 |
댓글