본문 바로가기
공부일기/JPA

JPA공부일기(7)

by 고다나 2023. 1. 15.
[자바 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

댓글