Spring Boot (16) 연관 관계 정리

넙데데맨·2022년 9월 14일
0
post-custom-banner

연관관계

JPA를 사용해 테이블의 연관관계를 엔티티 간의 연관관계로 표현한다.

매핑 종류

단방향

2개의 테이블 중 하나의 테이블이 한 쪽의 테이블을 참조하는 관계
어노테이션을 통해 참조할 테이블을 설정해준다.

양방향

2개의 테이블이 서로 참조하는 관계
양방향 테이블을 설정할 시 연관관계의 주인을 설정해야한다.
-> 외래키를 한 쪽의 테이블에서만 설정하기 위해 외래키를 관리할 테이블을 설정
양방향 연관관계 설정 시 순환참조가 발생할 수 있는 메소드를 주의해야한다.

연관관계의 주인

양방향 관계 설정 시 외래키를 관리하기 위한 연관관계의 주인을 설정한다.
외래키는 주인 쪽 테이블에서만 관리가 가능하며 주인이 아닌 쪽에서는 참조만 가능하다.


일대일 (1:1)

테이블끼리 1대1의 관계로 매핑되는 구조
@OneToOne 어노테이션을 사용해 참조할 테이블 설정

일대일 단방향

어노테이션을 사용해 다른 에티티 객체를 필드로 정의해 참조한다.
@JoinColumn 어노테이션을 설정해 외래키를 설정해준다.

일대일 양방향

@OneToOne 어노테이션을 양쪽에 선언한다.
단방향 관계를 서로 맺는 방식으로 구현
양방향 관계의 주인을 설정하기 위해
주인이 아닌 테이블에 @mappedBy 어노테이션을 설정해준다.

다대일 (N:1)

테이블끼리 N:1의 관계로 매핑되는 구조
N 쪽이 1쪽을 참조한다.
@ManyToOne @OneToMany 어노테이션을 사용한다.

다대일 단방향

@ManyToOne어노테이션을 사용해 매핑한다.

다대일 양방향

N쪽에서는 @ManyToOne을 1쪽에서는 @OneToMany를 사용해 각각 단방향 매핑한다.
관계의 주인은 N쪽이며 외래키 역시 N쪽에서 관리한다.

일대다 (1:N)

테이블끼리 N:1의 관계로 매핑되는 구조
1 쪽이 N쪽을 참조한다.

일대다 연관관계의 특징

매핑의 주체의 반대 테이블(N쪽 테이블)에 외래키가 생성
외래키 설정을 위해 update 쿼리를 추가로 실행시켜야하는 단점
따라서 일반적으로 일대다 관계가 필요할 시에는 다대일 양방향을 사용하는 편이 권장된다.

다대다 (N:N)

N:N의 관계로 매핑되는 구조
보통 실무에서는 다대일 관계를 사용한 테이블을 따로 만들어 관리한다.

영속성 전이(cascade)

특정 엔티티의 영속성 상태를 변경할 시 연관된 엔티티의 영속성 상태도 함께 변경되는 것을 말한다.
cascade 속성을 사용해 설정하며 주인 엔티티만 저장해도 cascade 설정에 맞춰 저장된다.

고아 객체

부모 엔티티와 연관관계가 끊어진 엔티티로 JPA 에서는 고아 객체를 자동으로 제거해주는 기능이 있다.
하지만 자식 엔티티가 다른 엔티티와 연관관계를 가지고 있는 경우에는 사용하지 않는 것이 좋다.

profile
차근차근
post-custom-banner

0개의 댓글