인프런 커뮤니티 질문&답변

캐내기님의 프로필 이미지
캐내기

작성한 질문수

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

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

다대다 부분이랑 이해가 안되는부분 질문

작성

·

273

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
다대다를 하는데

@jointable로 새로운 테이블을 만드는건 이해하는데

새로운 테이블에 외래키를 넘겨주는데

왜 한쪽 테이블에서는 mapper를 왜 쓰는지 이해가 안되네요.

 

예) Category 클래스안에 다대다라

jointable를 사용해 새로운 테이블을 만든건 이해하는데

근데 item클래스는 새로운 테이블에 외래키로 넘기는데

item클래스는 도대체 mapper를 왜 쓰는건가요?

이부분이 자세히 안 나와 있어서 의문만 생기네요

 

단순히 mapper가 읽기전용으로 쓰는걸로 아는데

다대다 여기서는 그림조차 그려지지가 않네요ㅠㅠ

item은 읽기전용? category를 주인장? 인건가요?

 

  1. parent: category child: list 이건 뭔가요? 다른클래스랑 연관관계도 없는데 갑자기 추가되서 혼동이 되네요

     

     

     

  2. category_ITEM 테이블이 만들어지면서 category_ID, Item_ID가 자동으로 만들어지는데 저희가 컬럼을 만들지도않았는데 어떻게 자동으로 만들어지는지 어디부분에서 이루어지는건지 모르겠네요

     

     

     

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 캐내기님

1. 이 질문은 mappedBy에 대한 질문으로 이해했습니다. JPA에서 양방향 연관관계가 발생하면 반드시 한곳은 연관관계의 주인으로 설정하고, 나머지 한 곳은 연관관계의 주인이 아니도록 설정해야 합니다. 이 부분은 연관관계의 주인 관련된 부분을 다시 한번 복습하는 것을 권장드려요.

참고로 강의에서 설명드리듯이 @ManyToMany는 실무에서 사용하지 않기 때문에 이해가 어려우면 넘어가셔도 괜찮습니다.

2. 이 부분은 넘어가셔도 됩니다 :)

3. JPA가 자동으로 만들어주는 테이블 입니다. category_ITEM이 만들어지면 이 테이블을 중심으로 양쪽에 다대일 관계를 형성해야 합니다. 이때 양쪽 테이블에 있는 PK를 자동으로 만들고 매핑합니다.

감사합니다.

0

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

질문 내용을 바탕으로, JPA에서의 다대다 관계 설정과 관련한 궁금증에 답변해 드리겠습니다. JPA에서 다대다 관계를 매핑하는 방법 중 하나는 @ManyToMany를 사용하고, 이 경우 중간 테이블(Join Table)이 필요합니다. 이 중간 테이블은 두 엔티티 간의 다대다 관계를 데이터베이스 상에서 구현할 수 있게 해줍니다. 그러나 실무에서는 이런 다대다 관계보다는 중간 엔티티를 직접 생성하여 다대일 (@ManyToOne), 일대다 (@OneToMany) 관계로 풀어내는 것을 선호합니다. 이 방식을 사용하면 더욱 유연하게 엔티티 간 관계를 설정할 수 있고, 중간 테이블에 추가적인 필드(예: 생성 시간, 수정 시간 등)를 넣을 수 있기 때문입니다.

질문에서 언급하신 ‘mapper’가 정확히 어떤 것을 의미하는지 명확하지 않습니다만, JPA에서 엔티티 간 관계를 매핑하는 방법에 대해 혼란이 있을 수 있습니다. 일반적으로 다대다 관계를 매핑할 때 중간 테이블을 지정하기 위해 @JoinTable을 사용하며, 여기에는 @JoinColumn을 통해 연결되는 컬럼들을 명시하게 됩니다. 간혹 ‘mapper’라는 용어가 이러한 역활의 주석이나 관계 설정의 다른 방법을 가리키는 경우가 있을 수 있으나, JPA의 컨텍스트에서는 관계 설정과 매핑에 사용되는 주석들을 주로 참조합니다.

@ManyToMany 관계에 있어서 ‘읽기 전용’과 ‘관계의 주인’ 등의 개념은 연관관계의 방향성과 관리 주체에 대한 것입니다. 관계의 주인은 연관 관계를 관리할 책임이 있는 엔티티를 말하며, JPA에서는 이를 통해 어느 쪽이 연관관계를 관리할지 결정합니다. 다대다 관계에서는 주로 mappedBy 속성을 사용하여 어느 쪽이 관계의 주인이 아닌지(읽기 전용 쪽)를 명시합니다.

질문하신 내용에 대해 보다 구체적인 예시나 해결 방법을 찾고 싶으시다면, 다음과 같은 유사한 주제의 질문과 답변을 참고하실 수 있습니다:

이 두 링크는 다대다 관계 설정과 실무에서의 사용법, 그리고 중간 테이블을 통한 매핑 방법에 대한 구체적인 사례와 설명을 제공합니다. 다대다 관계를 다루는 데 있어서 중간 엔티티를 사용하여 다대일, 일대다 관계로 변환하는 방법과 그 장점에 대해 이해하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

캐내기님의 프로필 이미지
캐내기

작성한 질문수

질문하기