Post

Spring JPA[1:1]

일대일 [ 1:1 ]

일대일 관계는 반대로 해도 일대일 입니다.
주 테이블이나, 대상 테이블 중에 외래 키 선택이 가능합니다. 외래 키에는 데이터베이스 유니크(UNI) 제약조건을 추가해야 합니다.

일대일 [1:1] - 단방향 [ 주 테이블 ]

Member.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToOne
    @JoinColumn(name = "Job_id")
    private Job job;
}

Job.class

1
2
3
4
5
6
7
8
9
10
11
@Entity
@Getter
@Setter
public class Job {
    @Id
    @GeneratedValue
    private Long id;

    private int jobname;

}

일대일 주 테이블 단방향 방법은 다애일 단방향 매핑과 유사합니다.

일대일 [1:1] - 양방향 [ 주 테이블 ]

Member.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToOne
    @JoinColumn(name = "Job_id")
    private Job job;
}

Job.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Getter
@Setter
public class Job {
    @Id
    @GeneratedValue
    private Long id;

    private int jobname;
    
    @OneToOne(maapedBy = "job")
    private Job job;

}

일대일 주 테이블 양방향도 다대일 양방향 매핑 처럼 외래 키가 있는 곳이 연관관계의 주인입니다.
반대편은 mappyedBy를 사용하여 적용합니다.

일대일 [1:1] - 단방향 [ 대상 테이블 ]

단방향 관계는 JPA를 지원하지 않습니다. 그로므로 일대일 대상테이블 단방향은 되도록 사용을 지향합니다.

일대일 [1:1] - 양방향 [ 대상 테이블 ]

일대일 주 테이블 외래 키 양방향 매핑과 방법은 똑같습니다.

결론

일대일 주 테이블

  • 장점
    • 대상 테이블에 데이터가 있는지 확인이 가능하다는 장점이있습니다.
  • 단점
    • 값이 없으면 외래 키에 null값을 허용한다는 단점이 존재합니다.

대상 테이블에 외래 키

  • 장점
    • 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조를 유지할 수 있습니다.
  • 단점
    • 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시로딩이 됩니다.

이러한 각각의 장단점들이 있습니다. 주로 주 테이블에 외래키를 두는 방법은 객체지향 개발자들이 많이 사용 합니다.

This post is licensed under CC BY 4.0 by the author.