본문 바로가기
프레임워크/JPA

[JPA] 다대일 [N:1] 일대일 [1:1] 다대다 [N:M]

by so5663 2023. 4. 5.

다대일 단방향 정리

• 가장 많이 사용하는 연관관계

 

다대일 양방향 정리

 외래 키가 있는 쪽이 연관관계의 주인

• 양쪽을 서로 참조하도록 개발

 

일대다 단방향 정리

• 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인

• 테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음

• 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하 는 특이한 구조

 

일대다 양방향 정리

• 이런 매핑은 공식적으로 존재X

• @JoinColumn(insertable=false, updatable=false)

• 읽기 전용 필드를 사용해서 양방향 처럼 사용하는 방법

• 다대일 양방향을 사용하자

 

일대일 정리

주 테이블에 외래 키

• 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾음

• 객체지향 개발자 선호

• JPA 매핑 편리

• 장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능 • 단점: 값이 없으면 외래 키에 null 허용

 

대상 테이블에 외래 키

• 대상 테이블에 외래 키가 존재

• 전통적인 데이터베이스 개발자 선호

• 장점: 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지

• 단점: 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩됨(프록시는 뒤에서 설명)

 

다대다 정리

• @ManyToMany 사용

• @JoinTable로 연결 테이블 지정

• 다대다 매핑: 단방향, 양방향 가능

실무에서는 거의 사용하지 않음