JPA를 사용해 테이블의 연관관계를 엔티티 간의 연관관계로 표현한다.
2개의 테이블 중 하나의 테이블이 한 쪽의 테이블을 참조하는 관계
어노테이션을 통해 참조할 테이블을 설정해준다.
2개의 테이블이 서로 참조하는 관계
양방향 테이블을 설정할 시 연관관계의 주인을 설정해야한다.
-> 외래키를 한 쪽의 테이블에서만 설정하기 위해 외래키를 관리할 테이블을 설정
양방향 연관관계 설정 시 순환참조가 발생할 수 있는 메소드를 주의해야한다.
양방향 관계 설정 시 외래키를 관리하기 위한 연관관계의 주인을 설정한다.
외래키는 주인 쪽 테이블에서만 관리가 가능하며 주인이 아닌 쪽에서는 참조만 가능하다.
테이블끼리 1대1의 관계로 매핑되는 구조
@OneToOne
어노테이션을 사용해 참조할 테이블 설정
어노테이션을 사용해 다른 에티티 객체를 필드로 정의해 참조한다.
@JoinColumn
어노테이션을 설정해 외래키를 설정해준다.
@OneToOne
어노테이션을 양쪽에 선언한다.
단방향 관계를 서로 맺는 방식으로 구현
양방향 관계의 주인을 설정하기 위해
주인이 아닌 테이블에 @mappedBy
어노테이션을 설정해준다.
테이블끼리 N:1의 관계로 매핑되는 구조
N 쪽이 1쪽을 참조한다.
@ManyToOne
@OneToMany
어노테이션을 사용한다.
@ManyToOne
어노테이션을 사용해 매핑한다.
N쪽에서는 @ManyToOne
을 1쪽에서는 @OneToMany
를 사용해 각각 단방향 매핑한다.
관계의 주인은 N쪽이며 외래키 역시 N쪽에서 관리한다.
테이블끼리 N:1의 관계로 매핑되는 구조
1 쪽이 N쪽을 참조한다.
매핑의 주체의 반대 테이블(N쪽 테이블)에 외래키가 생성
외래키 설정을 위해 update 쿼리를 추가로 실행시켜야하는 단점
따라서 일반적으로 일대다 관계가 필요할 시에는 다대일 양방향을 사용하는 편이 권장된다.
N:N의 관계로 매핑되는 구조
보통 실무에서는 다대일 관계를 사용한 테이블을 따로 만들어 관리한다.
특정 엔티티의 영속성 상태를 변경할 시 연관된 엔티티의 영속성 상태도 함께 변경되는 것을 말한다.
cascade
속성을 사용해 설정하며 주인 엔티티만 저장해도 cascade 설정에 맞춰 저장된다.
부모 엔티티와 연관관계가 끊어진 엔티티로 JPA 에서는 고아 객체를 자동으로 제거해주는 기능이 있다.
하지만 자식 엔티티가 다른 엔티티와 연관관계를 가지고 있는 경우에는 사용하지 않는 것이 좋다.