다양한 연관관계 맵핑3(1:1)

Mina Park·2022년 9월 9일
0
  • 일대일은 반대도 일대일
  • 외래키 선택: 주 테이블 or 대상 테이블
    • 외래키에는 반드시 유니크 제약조건 필요

1. 일대일 단방향(주 테이블에 외래키)

  • 가장 일반적이고 관리하기 쉬운 모델

2. 일대일 양방향(주 테이블에 외래키)

  • 다대일 양방향처럼 외래키가 있는 곳이 연관관계의 주인
  • 반대편은 mappedBy 적용 필수
@Entity
public class MemberMapping {

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

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

    @ManyToOne(fetch = FetchType.LAZY) //쿼리 분리
    @JoinColumn(name = "TEAM_ID")
    private TeamMapping team;

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    private Locker locker;
    
    //...getter,setter
    }
@Entity
public class Locker {

    @Id @GeneratedValue
    private Long id;

    private String name;

    @OneToOne(mappedBy = "locker")
    private MemberMapping member;
    
    //...getter,setter
}

3. 일대일 단방향(대상 테이블에 외래키)

  • JPA가 지원하지 않는 모델

4. 일대일 양방향(대상 테이블에 외래키)

  • 사실상 일대일 양방향(주 테이블에 외래키)과 맵핑 방법 동일

일대일 관계 정리

1) 주 테이블에 외래키가 있는 경우(권장)

  • 객체지향 개발자 선호, JPA 맵핑이 편리
  • 장점) 주 테이블만 조회해도 대상 테이블에의 데이터 유무 확인 가능
  • 단점) 값이 없을 경우 외래키에 null 허용

    2) 대상 테이블에 외래키가 있는 경우
  • 전통적인 개발자 선호
  • 장점) 주 테이블 / 대상 테이블을 일대일에서 일대다로 관계를 변경해도 테이블 구조 유지 가능
  • 단점) 프록시 기능 한계로 지연로딩으로 설정해도 항상 즉시 로딩됨

0개의 댓글