[JPA] 일대일(OneToOne) 관계

iniestar·2022년 3월 14일
0

Jpa의 장점 중 하나인 객체간 매핑을 어떻게 활용하냐에 따라 복잡해질 수도 단순해 질수도 있다. 그 중 일대일 관계(@OneToOne)에 대해서 적어본다.

1:1 관계는 주 테이블, 대상 테이블(참조를 해주는) 둘다 1:1 관계이다. 보통 외래키를 사용하는 경우 1:1 관계를 사용한다.

예를 살펴보자.

@Entity
public class Member {
    ...
        
    @OneToOne
    @JoinColumn(name = "locker_id")
    private Locker locker;
 
    ...
}

위 코드에서는 Member라는 주 테이블에서 Locker라는 대상 테이블의 외래키로 사용하고 있으며 해당 테이블의 PK 컬럼인 "locker_id"를 조인하고 있다.

@Entity
public class Locker {
    ...
        
    @OneToOne(mappedBy = "locker")
    private Member member;
}

반면, Locker 테이블에서는 양방향 관계를 위해 Member 객체를 매핑해주고 있는 모습이다.
왜냐하면, JPA에서는 주 테이블에서 참조만 하는 단방향 관계를 지원하지 않기 때문이다.

정리하면 아래와 같다.
1) 주 테이블에서 외래키 테이블의 PK 컬럼을 조인(@JoinColumn) 한다.
2) 대상 테이블에서 주 테이블에서 선언한 필드명을 매핑(mappedBy) 해준다.

1:1, 1:N 관계는 개발자들 입장에서 굉장히 간편한 기능이다. 그러나 너무 많은 객체의 관계를 맺는 경우 리소스의 소모가 급격하게 증가하며, 그에 따른 LAZY 로딩(지연 로딩) 방식일지, EAGER 로딩(즉시 로딩) 방식에 대한 설계를 따져봐야 할 것이다!

profile
while(true) { 손가락 관절염++ };

0개의 댓글