[SpringBoot] JPA로 DB 1:N 연관관계 설정하기 | @OneToMany, @ManyToOne 의미 | mappedBy란? :: 매운코딩
300x250

 
A 클래스에서 B 클래스의 정보를 사용해야 할때, (DB로는 외래키 개념) JPA에서는 어떻게 설정하는지에 대해 적어보겠다.

 

1. 단방향 예제

@Entity
public class Restaurant {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne
    @JoinColumn(name = "recommendation_history_id")
    private RecommendationHistory recommendationHistory;
}

식당을 추천하는 이력이 담는 로직이 있다고 치자. 그럼 이 소스의 의미는..
여러 Restaurant는 하나의 RecommendationHistory에 속한다.
외래키는 Restaurant 테이블에 생성된다.
 
 
 

2. 양방향 예제

하나의 추천이력 id 에는 여러개의 식당들이 나온다고 가정할 때, java 소스는 아래와 같다.
 
(1) Resturant 클래스

@ManyToOne
@JoinColumn(name = "recommendation_history_id")
private RecommendationHistory recommendationHistory;

어노테이션까지 의미를 종합해보면..
“Restaurant 테이블에 recommendation_history_id 컬럼이 있고
이 컬럼은 RecommendationHistory의 PK를 참조한다. (= 저쪽 PK를 우리쪽 FK로 사용한다) (@JoinColumn) ”
 
(2) RecommendationHistory 클래스

@OneToMany(mappedBy = "recommendationHistory",
           cascade = CascadeType.ALL,
           orphanRemoval = true)
@Builder.Default
private List<Restaurant> restaurants = new ArrayList<>();

이 소스를 해석해보면..
“RecommendationHistory 하나가 여러 개의 Restaurant를 가진다.
그리고 이 관계의 *주인은 Restaurant 쪽이다. (mappedBy) "
 
* 주인 = DB에서 FK 컬럼을 가진 엔티티  (객체의 주인, 부모/자식 개념이 아님!!)

 

3. 관계 방향별 어노테이션

1 : 1@OneToOne
1 : N@OneToMany
N : 1@ManyToOne
N : M@ManyToMany

 
 

728x90
728x90

+ Recent posts