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

김진동님의 프로필 이미지
김진동

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

스터디 도메인

강사님 Many To Many 관계에 대해서 질문있습니다

작성

·

415

0

데이터 베이스를 학습할때
many to many 의 관계는 생성되는 테이블이
관리가 되지않아서
의도치 않은 쿼리가 나가거나 컬럼을 더이상 추가할 수 없는 등의 문제로 one to many many to one 으로 새 ㅌ테이블을 만들어 연관관계를 맺어준다고 학습하였는데
강사님은 many to many를 사용하시는데
이게 전체적인 학습을 위해서 만들어진 강의라 그런것인지
아니면 many to many를 사용해도 되는 특수한 상황인건지 궁굼합니다

답변 2

0

실무 환경이 mybatis라 jpa도입이 어려운 상황이라서 jpa관련 경험이 없기에 저도 이게 궁금했는데 질문과 답변 감사합니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

안녕하세요.

말씀하신 manyToMany 사용시 발생하는 문제들에 대해 조금 더 자세히 알 수 있을까요? 어느 자료를 참고하면 해당 정보를 알 수 있을까요?

제가 ManyToMany나 ManyToOne 또는 OneToMany 등을 사용하는 기준은 어디까지나 도메인 로직상 해당 엔티티 간의 관계만을 생각해서 정할 뿐 기술적인 문제 때문에 ManyToMany를 피하진 않았거든요.

말씀하시는게 관계형 DB에서의 다대다 관계라면 이야기가 다르겠지만요.

김진동님의 프로필 이미지
김진동
질문자

제가 설명을 잘못한것같습니다 DB관계에서의 다대다 매핑의 문제점에 관한 고민이었습니다

말씀하신대로 관계형 db에서 정규화된 테이블로 다대다 관게를 표현하기에 어려움이 있는데

스프링에서 manyTo many로 매핑하면  실제 테이블과 코드가 다른 문제가 발생한다고 생각합니다

제가 참고한 자료는 타 강사님의 강의에서 N:M은 1:n M:1로 풀어서 작성해주는것이 좋다고 했고 

그 이유로는 엔티티로서 관리되지 않는 테이블의 생성으로 인한 문제를 예시로 들었던것으로

기억합니다 두 강사님의 코딩 스타일로 이해를 하고 가면되는부분인지 제가 좀 더 학습해야 할 부분인지 기준이 서지않아 질문드립니다

백기선님의 프로필 이미지
백기선
지식공유자

"엔티티로 관리되지 않는 테이블의 생성"이라는게 잘 이해가 되지 않네요. @ManyToMany와 @JoinTable을 사용해서 엔티티로 관리하는 테이블이 생성되는데 어떤 테이블이 왜 관리가 안되다고 하는 것인지 설명 해 주시겠어요?

김진동님의 프로필 이미지
김진동
질문자

지금 예제에서  many to many로 매핑된 연관관계를보면

Account_Tags Account_zones 와같이 엔티티로서 정의하지 않은 테이블이 생겼는데

실제 실무에서 Account_tags에 baseEntity가 삽입되어야 한다던지

따로 관리해줘야할 칼럼이 생긴다던지 하는 부가적인 문제에 대응때문에 실무에서 사용하지 않는 매핑

이라고 학습하였습니다 

조인테이블 어노테이션 또한 컬럼을 추가하게되면 사용할 수 없는것으로 알고 있습니다

혹시 제가 잘못이해한 부분이 있나요? 

 

 

백기선님의 프로필 이미지
백기선
지식공유자

Account_Tags와 Account_Zones에 들어가는 정보는 결국에 Account, Tags, Zones에 정의되어있는 ID들입니다. 엔티티에 들어있고 애노테이션으로 정의한 정보를 기반으로 테이블이 생기는데, 엔티티로 정의한 테이블이 아닌 조인 테이블이 생긴다고 해서 "엔티티에서 관리하지 않는"다고 말할 수는 없다고 생각합니다.

그리고 말씀하고 계신 경우는 조인 테이블에 추가 컬럼을 정의해야 하는 경우를 말씀하시는데, 그런 경우엔 당연히 다대다 맵핑이 아닌 일대다 맵핑으로 풀어서 정의하고 컬럼을 추가하는게 맞습니다.

"엔티티로 관리되지 않는다"라는 말씀이 조인 테이블에 컬럼을 추가할 수 없다는 말이었다면 말씀하신게 다 맞습니다.

김진동님의 프로필 이미지
김진동
질문자

다양한 상황에 맞춰서 애노테이션을 활용해야하겠네요 상세한 답변 정말감사합니다 

김진동님의 프로필 이미지
김진동

작성한 질문수

질문하기