• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

다대다 관계 시 insert 질문입니다.

20.06.02 15:13 작성 조회수 1.69k

0

안녕하세요 영한님!

강의 들으면서 개인적으로 작은 프로젝트를 하나 만들어 보고 있습니다.

다대다 관계 시 insert 방법이 궁금합니다.

아래와 같이 erd가 구성되어 있습니다.

회원 테이블, 상품 테이블 그리고 회원이 찜한상품 테이블 총 3개가 있고

찜한상품 테이블이 회원과 상품 테이블을 연결하는 연결테이블입니다.

entity는 테이블과 같이 총 3개를 생성했습니다. (@ManyToMany는 사용하지 않고 비식별관계로 만들었습니다.)

1) UserRepository를 생성해서 User를 저장하고

2) ItemRepository를 생성해서 Item을 저장하고

3) ItemLikeRepository를 생성하고 ItemLike 객체를 생성 후 저장된 User와 Item의 연관관계를 설정하고 저장

이렇게 3단계를 거쳐서 모든 데이터를 저장하고 있는데요.

연결테이블의 저장소인 ItemLikeRepository를 생성해서 저장을 해야 될까..? 라는 의문점이 듭니다. 

ItemLikeRepository는 save() 외에는 거의 사용할 일이 없을거 같은데 구지 생성을 해야 될까 생각도 들고..

다대다 관계 저장 시 효율적인 방법이 있을까요??

감사합니다.

답변 4

·

답변을 작성해보세요.

1

 맞습니다^^

처음 JPA로 설계하면 모든 것을 사용자가 행동을 하니 사용자에 다 넣으려고 합니다.

이것은 현실 세계에서는 맞지만, 객체지향 세상에서는 사실 잘못된 설계인 것이지요. 객체지향 설계에서는 객체 각각이 자율권을 가지고 행동하는 것이 중요합니다.

여기서 itemLike도 명확하게 분리된 하나의 기능입니다.(Like가 중요한 기능이다 아니다를 떠나서 User와 관련된 기능도 아니고, Item과 관련된 기능도 아닌 독립된 기능이라는 뜻입니다.)

따라서 ItemLike 자체도 별도의 서비스와 별도의 Repository를 가지는 것이 더 나은 설계일 확율이 높습니다^^!

도움이 되셨기를 바래요^^

1

안녕하세요. 치훈이님 좋은 질문입니다^^

앞에서도 비슷한 질문을 받았는데요.

다음 질문을 참고하시면 도움이 될꺼에요^^

https://www.inflearn.com/questions/36838

감사합니다.

0

치훈이님의 프로필

치훈이

질문자

2020.06.03

자세한 답변 감사합니다!

객체지향 설계에서 객체 각각이 중심이 되서 행동하는게 중요하군요

아무래도 아직 익숙하지 않다보니 저도모르게 사용자 중심으로 자꾸 생각을 하게 되는거 같습니다ㅎㅎ

어떠한 객체들이 독립적인 기능을 가지고 행동을 할지 충분히 고민해보겠습니다.

감사합니다^^!!!

0

치훈이님의 프로필

치훈이

질문자

2020.06.02

답변 감사합니다 영한님!

해당 링크를 타고 들어가 답변을 확인했습니다.

일단 답변을 제대로 이해한지 모르겠는데...

1) cascade는 사용하지 않고

2) User -> Item_like 관계는 필요없고 Item_like -> User의 관계만 두고

3) 마찬가지로 Item_like -> Item 의 관계를 둔다.

위의 내용이 맞나요?

그럼 아래와 같이 클래스를 작성하고

서비스도 아래와 같이 작성을 하면 될까요??

결국 User와 Item 그리고 ItemLike 마다 repository를 각각 만들고 각각 저장을 해주면 될까요?

답변 내용을 제대로 이해하지 못해서 그런가 좀 혼란스럽네요..ㅠㅠ