20211125 TIL - JPA를 곁들인 테이블 조인을 해보자
오랜만에 돌아온 TIL
이번 3차 프로젝트는 Spring을 이용해서 프로젝트를 진행한다
Flask로 프로젝트를 진행할때와는 다르게 고민할게 엄청 많았다
테이블구성이나 테이블간의 조인같은 🤯🤯
테이블에서 어떤 컬럼을 쓸것인가 이런것은 사실 어렵지 않았는데
나의 가장 큰 문제는 바로 조인이었다
이것도 맞는것같고 저것도 맞는것 같은 🤑🤑
게시글과 댓글의 관계에서
가설1)
게시글 1개에 댓글 여러개가 달리니까 1 : N
게시글 입장에서 OneToMany로 해주면 되지 않을까
가설2)
댓글 여러개에 게시글 하나니까 N : 1
댓글 입장에서 ManyToOne
가설3)
게시글과 댓글 서로가 서로룰 알아야하니까 양방향 매핑을 해주자
상상의 나래를 혼자서 펼쳐나갔다 🤯🤯
사실 우리팀의 코드는 양방향 매핑으로 다 구현되어있었지만, 나도 해내고 싶었기때문에 꼭 꼭 성공하고자 하는 마음이 컸다
게시글 엔티티인 Article
에는 댓글의 리스트인 List<Comment>
를 만들어주고, 댓글 엔티티인 Comment
에 Article
객체를 만들어주고 get,post를 구현하고자 했다
우여곡절 끝에 구현은 성공했는데
api테스트를 해보면 댓글 안에 게시글 안에 댓글리스트 안에 또 댓글 안에...🙃😐
무한루프에 빠져 나올수가 없었다 😢😢
이미 48시간넘게 고통받고 있던 나는 구글링해서 해결 해야겠다라는 의지조차 없었고
더 단순하게 시작하기위해 게시글이 댓글리스트를 가지고 있는 형태로 구현하였다
게시글이 댓글을 아는 경우를 시도해보았는데 처음에는 생성만 되고 게시글과 연관지을 수 없어서 왜그럴까 생각했는데...
게시글한테 댓글 리스트를 추가해주지 않아서인것 같았다
CommentService
에서 findById
로 게시글의 아이디값을 찾고 게시글이 존재하면 새 댓글을 생성하고 저장해준 뒤 게시글이 가지고있는 commentList
에 추가해주니까 내가 원하는 결과물이 나왔다!!!
public Comment createComment(CommentRequestDto requestDto, Article article) {
articleRepository.findById(article.getArticleId()).orElseThrow(
() -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
);
Comment comment = Comment.builder()
.content(requestDto.getContent())
.build();
commentRepository.save(comment);
article.getCommentList().add(comment);
return comment;
}
테스트 결과는 아래와 같다
내 코드가 정답은 아니겠지만 내가 해냈다는것이 엄청 기뻐서 테스트를 계속 해봤던것 같다 😆😆
구현되어있는 우리팀의 코드가 더 좋은코드인지 내가 짠 코드가 더 좋은 코드인지 지금 나에게 중요치는 않았다
나는 현업개발자가 아닌 배우는 과정이고, 캠프에 참여하는동안 이런 저런 우여곡절을 많이 겪어볼 수록 더 나은 개발자가 되거라 생각한다
양방향매핑을 해야하는가에 대해서는 아직 고민해보는 중이지만 뭔가 하나를 해내고나니까 다음것도 다 할 수 있을것만 같은 기분이 든다!!
어제 같은 문제로 골머리를 앓던 캠퍼분을 알게되었는데, 구현에 성공하였다는 엄청난 소식을 듣고 두배로 기뻤다 👏🏻👏🏻
피곤한 목요일에 너무나 행복하게 잠들 수 있을것 같은 밤이다 🤣🤣
마지막으로 어젯밤 큰 도움을 주신 튜터님 정말 감사드립니다 🙇🏻♀️🙇🏻♀️
Author And Source
이 문제에 관하여(20211125 TIL - JPA를 곁들인 테이블 조인을 해보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihye/20211125-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)