Spring Data JPA

[JPA] 연관관계 매핑_일대일(1:1) - 경험을 기록하는

여행하는 개발자(SOO) 2024. 6. 25. 16:15
728x90

일대일

각 엔티티는 상대 엔티티와 하나의 관계만을 가집니다.

 

데이터베이스에서는 외래키에 UNIQUE 제약조건이 추가된 상황

 

사용 예시

Member

@Entity  
public class Member {  

@Id  
@GeneratedValue(strategy = GenerationType.AUTO)  
@Column(name = "MEMBER_ID")  
private Long id;  

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

@ManyToOne(fetch = FetchType.LAZY)  
@JoinColumn(name = "TEAM_ID")  
private Team team;  

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

 

Member에서 Locker를 관리하기 때문에 @JoinColumn을 추가합니다.
Member에서 Locker에 데이터를 생성, 수정을 합니다.

 

반대쪽엔 Locker에서 mappedByMemberlocker와 매핑이 되고 조회를 담당합니다

 

Locker

@Entity  
public class Locker {  

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

private String name;  

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

장단점

장점

  • 편리한 데이터 접근: 관련 데이터에 쉽게 접근할 수 있습니다.

단점

  • 성능 이슈: 항상 두 테이블을 조인해야 할 수 있어 성능에 영향을 줄 수 있습니다.
  • 복잡성: 양방향 관계 설정 시 복잡도가 증가할 수 있습니다.
  • 확정성 제한: 향후 1:N 관계로 변경이 필요한 경우 구조 변경이 필요합니다.
728x90