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
