@Entity //(JPA)가 관리하는 객체
@Getter //MemberRecipe 객체의 필드에 접근 가능
public class MemberRecipe {
@Id //PK역할
@GeneratedValue(strategy = GenerationType.IDENTITY) //PK의 값을 자동으로 생성하는 전략
private Long id;
@ManyToOne
private Member member;
@ManyToOne
private Recipe recipe;
@Builder //생성자에 @Builder 적용
// Lombok 어노테이션 , Member와 Recipe 객체를 전달하여 MemberRecipe 객체를 생성 가능
public MemberRecipe(Member member, Recipe recipe) {
this.member=member;
this.recipe=recipe;
//Member와 Recipe 객체간의 양방향 관계를 설정하기 위한 코드
member.getMemberRecipeList().add(this); (A)
recipe.getMemberRecipeList().add(this); (B)
}
}
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
**private List<MemberRecipe> memberRecipeList** = new ArrayList<>();
@OneToMany(mappedBy = "recipe")
**private List<MemberRecipe> memberRecipeList** = new ArrayList<>();
/** 이 Recipe 생성 후 RecipeIngredient의 인자로 넣기. 스크랩 할 때는 MemberRecipe의 인자로 넣기 */
<aside> 🔑 Member와 연관지어 생각해보기
(A)
Member와 Recipe 객체 간의 양방향 관계를 설정하기 위한 코드
Member 객체와 연결된 MemberRecipe객체를 Member의 MemberRecipeList에 추가
(B)
Member와 Recipe 객체 간의 양방향 관계를 설정하기 위한 코드
Recipe 객체와 연결된 MemberReipe객체를 Recipe의 MemberRcipeList에 추가
</aside>
JPA 1:N N:1 매핑에 대한 고민
memberRecipeList에 넣는방식이 아니라
status를 추가해서 status가 true인 것들을 반환하도록 하는 것은 어떨까?
짚고 넘어가야하는 점 (고민거리)
멘토링 및 질문 답변
Member와 Recipe 란 db 안에 MemberRecipe란 객체가 그대로 들어가는 형태임
양방향관계 Mapping을 할때는 1:N 을 2번이어서 중간 Entity를 만들어야 안전하다
스프링 JPA에서 양방향 매핑이 @ManyToMany가 있기는 한데 이게 좀 문제가 일으킬 가능성이 높아서 중간에 엔티티를 하나 생성해서 간접적으로 양방향 매핑을 구현한 느낌?으로 보시면 될 것 같아요!
보통 양방향 매핑은 이렇게 중간 엔티티를 생성해서 구현한다고 합니다!