inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

실전 예제 3 - 다양한 연관관계 매핑

N:M 을 1:N N:1 로 풀면 이런 모습일까요?

727

cjkimhello97

작성한 질문수 10

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<>();
}

java jpa

답변 3

2

cjkimhello97

아 이해했습니다!

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

y2gcoder

엇 체크해주셔서 감사합니다!
mappedBy 속성은 연관관계 매핑을 위해 주인을 지정해주는 옵션이라고 생각하시면 됩니다!
그래서 Category 에서는 CategoryItem에서 지정한 Category의 필드명을 적어주는 것이 맞습니다! 이 경우에는 category 가 맞습니다!

0

y2gcoder

안녕하세요. cjkimhello97님, 공식 서포터즈 y2gcoder입니다. AI 답변에 더하여 답변 드립니다.

AI 인턴이 알려준 답변 링크를 참고해보시는 것을 권해드립니다.
답변 링크를 보기 전에 힌트를 드리자면 Order, OrderItem, Item 의 관계를 참고해서 작성해주셨던 부분과 어떤 부분이 다른지 살펴보시라고 말씀드리고 싶습니다 🙂

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

cj김hello97님의 N:M 연관관계를 1:N 및 N:1로 풀어서 중간 엔티티를 만드는 방법에 대한 질문에 관한 답변은 아래 URL에서 확인하실 수 있습니다. 질문에 대한 답변을 읽고 필요한 지식을 습득하여 프로젝트에 적용해 보시길 바랍니다.

감사합니다.

inheritance startegy 선택시 고려사항

0

11

0

Entity 동등성 비교

0

14

1

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

52

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

53

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

89

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

84

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

91

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

138

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1