본문 바로가기
Data Base/JPA

[JPA] : 일대일, 1:1

by 오주현 2022. 4. 13.
반응형

1 : 1은 반대도 일대일이다.

외래키를 둘 중 한 곳에만 넣으면 된다.

외래키에 데이터베이스 유니크 제약조건을 추가를 해야한다.

일대일 관계는 간단하게 구현할 수 있다.

@Entity
public class Locker {

    @Id @GeneratedValue
    private Long id;

    private String name;
}

Locker에 간단하게 id와 name를 만들어준다.

@Entity
public class Member {

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    private Locker locker;
}

Member에서 @OneToOne를 통해 Locker를 1대1 매핑한다.

@JoinColumn 어노테이션 정도는 사용해 줘야 깔끔하게 정리가 된다.

여기서 만약 양방향 매핑을 원하면 아래와 같이 추가를 해주면 된다.

@Entity
public class Locker {

    @Id @GeneratedValue
    private Long id;

    private String name;

    @OneToOne(mappedBy = "locker")
    private Member member;
}

이러면 member는 읽기 전용이 된다.

다대일 양방향 매핑은 외래 키가 있는 곳이 연관관계의 주인이다. 반대편은 위와 같이 mappedBy를 적용한다.

  • 주 테이블에 외래키

주 테이블 조회로 대상 테이블 데이터까지 확인이 가능하지만 값이 없으면 외래키에 null이 허용된다는 단점이 있다.

객체지향 개발자가 선호한다.

  • 대상 테이블에 외래키

주 테이블과 대상 테이블을 1:1에서 1:N으로 변경할 때 테이블 구조를 유지할 수 있지만 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩되는 단점이 있다.

전통적인 데이터베이스 개발자가 선호한다.

양방향으로 만들어야 한다.


자바 ORM 표준 JPA 프로그래밍 - 기본편을 참고하여 공부하였습니다.

반응형

댓글