본문 바로가기
스파르타 내배캠

[TIL] #23. 연관관계

by saemsaem 2024. 5. 24.


 

 [ N : 1 ] 

데이터테이블의 1, N 관계에서 외래 키는 항상 N이 가지고 있다.
  ⇒ 양방향의 경우, 항상 N이 연관관계의 주인이다.
  ⇒ 양발향의 경우, @OneToMany를 선언한 쪽에서 mappedBy 속성을 지정해야 한다.

단방향

N에 @ManyToOne을 추가 한다.
N1을 조회하는 것만 가능하다. (반대는 불가능)

 

양방향

1에 @OneToMany를 추가한다. 
연관관계의 주인을 mappedBy로 지정해준다. 
서로를 조회할 수 있다. 

 

예시 : 회원별 상품 API 구현

상품과 회원의 관계
 - 상품 등록 시 누구의 상품인지 등록이 필요 ⇒등록을 요청한 회원 정보 추가 필요
 - 상품 : 회원 = N : 1 ⇒ 한 명의 회원이 다수의 상품을 가질 수 있음
 - 회원 객체에서 상품 객체를 조회하는 경우가 없기 때문에 상품과 회원을 N:1 단방향 연관관계로 설정

// Product Class

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;

 

 

 [ 1 : N ] 

연관관계의 주인을 1에 둔 것이다.
entity를 1개 이상 참조하기 때문에 컬렉션을 이용한다. 

단방향

@OneToMany에 mappedBy가 사라진다. 
대신 @JoinColumn을 이용해서 조인한다. 
1:N 단방향 mapping이 필요한 경우, 그냥 N:1 양방향 mapping을 사용하는게 더 좋다.

 

양방향

존재하지 않는다.

'스파르타 내배캠' 카테고리의 다른 글

[TIL] #25. HTTP 응답 상태 반환  (0) 2024.05.28
[TIL] #24. JWT  (0) 2024.05.24
[TIL] #22. 4주차 강의  (0) 2024.05.22
[TIL] #21. spring 3주차 강의  (0) 2024.05.21
[TIL] #20. Transaction  (0) 2024.05.20