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) 해준다.