일대일(1:1)

PPakSSam·2022년 1월 7일
0
post-thumbnail
  • 일대일 관계는 그 반대도 일대일 관계이다.
  • 주 테이블이나 대상 테이블 중에 외래키 선택 가능
    • 주 테이블에 외래키
    • 대상 테이블에 외래키
  • 외래키에 데이터베이스 유니크(UNI) 제약조건 추가

주 테이블에 외래키 단방향

[Member]

@Entity
public class Member {

    @Id @GeneratedValue
    private Long id;

    @Column(name="USERNAME")
    private String username;

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

[Locker]

@Entity
public class Locker {

    @Id @GeneratedValue
    @Column(name = "LOCKER_ID")
    private Long id;

    private String name;
}

주 테이블에 외래키 양방향

[Member]

@Entity
public class Member {

    @Id @GeneratedValue
    private Long id;

    @Column(name="USERNAME")
    private String username;

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

[Locker]

@Entity
public class Locker {

    @Id @GeneratedValue
    @Column(name = "LOCKER_ID")
    private Long id;

    private String name;
    
    @OneToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;
}

대상 테이블에 외래키 양방향

[Member]

@Entity
public class Member {

    @Id @GeneratedValue
    private Long id;

    @Column(name="USERNAME")
    private String username;

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

[Locker]

@Entity
public class Locker {

    @Id @GeneratedValue
    @Column(name = "LOCKER_ID")
    private Long id;

    private String name;
    
    @OneToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;
}
  • 대상 테이블의 외래키 단방향은 JPA에서 지원하지 않는다.
  • 테이블의 구조만 달라졌을뿐 매핑하는 것은 주 테이블의 외래키 양방향과 같다.


주 테이블에 외래키

  • 주 객체가 대상 객체의 참조를 가지고 있는 것처럼 주 테이블에 외래키를 두고 대상 테이블을 찾는다.
  • 객체지향 개발자가 선호한다.
    • 단방향으로 설정해도 Member만 가져오면 Locker의 값을 알 수 있으므로
    • 대상 테이블에 외래키를 하면 무조건 양방향으로 설정해야하므로 복잡하다.
  • JPA 매핑 편리 -> 단방향으로 해도 된다.
  • 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능
  • 단점 : 값이 없으면 외래키에 null을 허용한다.

대상 테이블에 외래키

  • 대상 테이블에 외래키가 존재한다.
  • 전통적인 데이터베이스 개발자가 선호한다.
  • 장점 : 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조가 유진된다.
  • 단점 : 프록시 기능의 한계로 지연로딩으로 설정해도 항상 즉시로딩된다.
profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글