다양한 연관관계 매핑(2) - slahsk/study GitHub Wiki

일대일[1:1]

주 테이블에 외래 키(객체지향 개발자 선호)

주 테이블에 외래 키를 두고 대상 테이블 참조.

주테블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블관 연관관계가 있는지 알 수 있다.

단방향

  @Entity
  public class Member{
    @Id
    @GeneratedValue
    @Column(name="MEMBER_ID")
    private Long id;

    private String username;

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")//외래키는 여기에서 관리
    private Locker locker;

  }

  @Entity
  public class Locker{
    @Id
    @GeneratedValue
    @Column(name="LOCKER_ID")
    private Long id;

    private String name;

  }

양방향

  @Entity
  public class Member{
    @Id
    @GeneratedValue
    @Column(name="MEMBER_ID")
    private Long id;

    private String username;

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")//외래키는 여기에서 관리 연관관계 주인
    private Locker locker;

  }

  @Entity
  public class Locker{
    @Id
    @GeneratedValue
    @Column(name="LOCKER_ID")
    private Long id;

    private String name;

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

대상 테이블에 외래 키(데이터베이스 개발자 선호)

테이블 관계를 일대일에서 일대다로 변경할 때 테이블 구조를 그대로 유지할 수 있다.

단방향 없음 불가

양방향

  @Entity
  public class Member{
    @Id
    @GeneratedValue
    @Column(name="MEMBER_ID")
    private Long id;

    private String username;

    @OneToOne
    private Locker locker;

  }

  @Entity
  public class Locker{
    @Id
    @GeneratedValue
    @Column(name="LOCKER_ID")
    private Long id;

    private String name;

    @OneToOne(mappedBy = "locker")
    @JoinColumn(name = "MEMBER_ID")//외래키는 여기에서 관리 연관관계 주인
    private Member member;
  }