연관관계 매핑

jiyoon·2023년 5월 7일
2

1. 1 : 1

양방향 1:1 관계에서는 두 테이블이 서로 참조와 관리가 가능하며, 양쪽 테이블에서 서로 필요한 객체를 가져올 수 있다. 하지만 양방향 관계를 설정하면 관계의 주인을 정의해야 하고 주로 외래 키를 가지고 있는 쪽이 관계의 주인이 된다. (주의할 점은 양방향 관계에서 연관관계의 주인이 아닌 쪽에 ‘mappedBy’ 를 사용해야 한다.)

1:1 관계의 테이블에서 단방향으로 한쪽 테이블에서만 @OneToOne 을 사용했을 때는 @OneToOne을 사용한 테이블에 @JoinColumn을 추가해줘야 한다.

2. n : m , 1 : n

OneToMany를 사용한 테이블에서 JoinColumn을 사용하지 않는 이유는 관계의 주인이 아닌 엔티티에서 'mappedBy' 속성을 사용해 관계를 매핑하기 때문이다. ('mappedBy'는 반대편 엔티티에서 필드 이름을 사용해 관계를 설정함)


요약

@JoinColumn을 가진 테이블이 관계의 주인, 'mappedBy'는 관계의 주인이 아닌 엔티티이다. (n:m 관계에서 중간 테이블의 반대편 테이블에서 필드 이름을 지정해 관계를 설정함)

관계의 주인 : 객체 간의 관계를 DB에 반영할 때 실제로 외래 키를 관리하게 되는 엔티티

단방향 매핑 : 한쪽 방향의 참조만 가능하므로 객체 간의 관계를 쉽게 설정할 수 있다.

양방향 매핑 : 양쪽 방향의 참조가 가능하여 더 복잡하고 유연한 관계를 표현할 수 있다. 양방향 설정 시에는 @JoinColumn으로 관계의 주인을 정하고 'mappedBy'를 사용해 주인이 아닌 테이블을 지정해 줘야 한다.

관계의 주인을 지정해주지 않으면 JPA는 어느 테이블이 관계의 주인인지 알 수 없어 정상적으로 작동하지 않는다.


단방향 vs 양방향 🙄

profile
한걸음 나아가는 개발자

0개의 댓글