작성
·
595
2
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네
[질문 내용]
안녕하세요. 항상 영한님의 강의를 수강하며 재밌게 공부하고 있습니다.
질문이 있습니다.
Item & Category 를
다대다가 아니라
일대다 다대일로 연관관계 매핑을 할 때
중간테이블을 직접 만든다면 다음과 같이 만들면 되는걸까요?
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
@OneToMany
@JoinColumn(name = "ITEM_ID")
private List<CategoryItem> categoryItems = new ArrayList<>();
}
@Entity
public class CategoryItem {
@Id @GeneratedValue
@Column(name = "CATEGORY_ITEM_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "CATEGORY_ID")
private Category category;
@ManyToOne
@JoinColumn(name = "ITEM_ID")
private Item item;
}
@Entity
public class Category {
@Id @GeneratedValue
@Column(name = "CATEGORY_ID")
private Long id;
private String name;
@OneToMany
@JoinColumn(name = "CATEGORY_ID")
private List<CategoryItem> categoryItems = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
}
답변 3
2
아 이해했습니다!
CategoryItem 클래스의 category, item 에서 FK를 가지고 있으니 category, item 은 주인입니다
그럼 반대로, Item 클래스의 categoryItems, Category 클래스의 categoryItems 는 대상이 되어 @OneToMany(mappedBy = "item") 가 되어야 합니다
그런데 질문이 있습니다.
Item 클래스, Category 클래스에서 모두 다음과 같이 작성되어있습니다.
@OneToMany(mappedBy = "item")
private List<CategoryItem> categoryItems;
mappedBy = "category" 로 쓰지 않고
mappedBy = "item" 으로 작성한 이유는 무엇인가요?
즉, 양방향 연관관계 매핑을 위해 존재하는 대상임은 이해가 되었지만, mappedBy 속성을 정하는 기준이 궁금합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
cj김hello97님의 N:M 연관관계를 1:N 및 N:1로 풀어서 중간 엔티티를 만드는 방법에 대한 질문에 관한 답변은 아래 URL에서 확인하실 수 있습니다. 질문에 대한 답변을 읽고 필요한 지식을 습득하여 프로젝트에 적용해 보시길 바랍니다.
감사합니다.
엇 체크해주셔서 감사합니다!
mappedBy 속성은 연관관계 매핑을 위해 주인을 지정해주는 옵션이라고 생각하시면 됩니다!
그래서 Category 에서는 CategoryItem에서 지정한 Category의 필드명을 적어주는 것이 맞습니다! 이 경우에는 category 가 맞습니다!