개념정복💫/스프링 Spring 정복

JPA 일대일(OneToOne) 관계 매핑

옹쑥이 2025. 2. 23. 00:18

JPA에서 1:1 관계를 설정할 때는 @OneToOne과 함께 @JoinColumn 또는 mappedBy 속성을 사용합니다.
어떤 엔티티가 외래 키를 가질지에 따라 설정이 달라집니다.


1. @JoinColumn 사용 시

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "diary_tags_no")
private DiaryTagsEntity diaryTagsEntity;
  • DiaryEntity 테이블에 diary_tags_no 컬럼이 생성됨 (주인, owner)

2. mappedBy 사용 시

@OneToOne(mappedBy = "diaryEntity", cascade = CascadeType.ALL)
private DiaryTagsEntity diaryTagsEntity;
  • DiaryTagsEntity 쪽에 외래 키가 존재 (DiaryEntity는 매핑 주인이 아님, non-owner)

3. 예시 코드

@Entity
public class DiaryEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long diaryNo;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "diary_tags_no")
    private DiaryTagsEntity diaryTagsEntity;
}

@Entity
public class DiaryTagsEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long tagNo;

    @OneToOne(mappedBy = "diaryTagsEntity")
    private DiaryEntity diaryEntity;
}
 
  • 실제 외래 키를 DiaryEntity가 가질지, DiaryTagsEntity가 가질지 프로젝트 설계에 맞춰 결정

 

1:1 관계 매핑은 구조가 단순해 보이지만, 조인 전략성능을 면밀히 따져야 합니다.
양방향 매핑 시 무한 루프 문제를 방지하기 위해 DTO 변환 또는 @JsonIgnore 사용이 필요할 수 있습니다.

2025.02.21 - [개념정복💫/스프링 Spring 정복] - 양방향 매핑 시 무한 루프 문제란?