일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- c#
- 유니티
- spring
- springboot
- 스프링
- IntelliJ
- jwt
- JSON
- node.js
- frontend
- oAuth
- react
- 백엔드
- RiotAPI
- 백준
- 게임
- 스프링부트
- 깃
- unity
- Python
- 코딩
- express
- AWS
- bcrypt
- 프로그래밍
- 파이썬
- netlify
- 게임개발
- MongoDB
- OAuth2.0
- Today
- Total
Unwound Developer
스프링부트 One To Many 관계설정 본문
이번에는 Post에 사용자가 좋아요를 누르는 것을 구현합니다.
처음에 Like라는 테이블을 하나 더 만들어서 어떤 멤버가 어떤 글을 좋아하는지에 대한
정보를 담은 형식으로 구현했습니다.
근데, 나중에 조회할 때를 생각해보니, 너무 비효율 적이더라구요.
예를 들면, 내가 어떤 글에 좋아요를 눌렀나를 검색해보려면..
서버에 존재하는 모든 좋아요 목록을 전부 뒤져봐야 합니다.
생각해보니까 OneToMany라는 관계를 스프링부트 어노테이션으로 설정할 수 있더라구요.. 바로 찾아봤습니다.
실무에서 ManyToOne, ManyToMany는 사용을 권하지 않는다고 하더라구요!
애초에, OneToMany가 맞는 상황인거같긴한데
한 사용자가 여러 글을 좋아할 수 있으니까 OneToMany가 맞는 것 같습니다.
@OneToMany
@JoinColumn(name = "like_post", referencedColumnName = "id")
private List<Post> likePost;
Member 도메인에는 위와같이 컬럼을 설정했습니다.
Post 도메인을 OneToMany로 참조하면서, List형으로 저장했어요.
OneToMany로 설정하면 애초에 그냥 List같이 단수형으로는 지정이 안됩니다!!
public Member like(LikeRequestDto likeRequestDto) {
String memberId = likeRequestDto.getMemberId();
Long postId = likeRequestDto.getPostId();
Member member = memberRepository.findByMemberId(memberId).get();
Post post = postRepository.findById(postId).get();
member.getLikePost().add(post);
memberRepository.update(member);
return member;
}
MemberService의 like 함수 입니다.
받아온 memberId와 postId를 통해 사용자와 post를 찾아오고, 해당 사용자의 좋아요 목록(List형 Post)에 add 합니다.
add는 List의 내장 메소드이구요
repository의 update 함수로 좋아요를 추가한 사용자를 보냅니다.
@Override
public Member update(Member member) {
em.merge(member);
return member;
}
DB에 새로 추가할땐 EntityManager.persist를 사용했지만 이번엔 좋아요 목록을 추가한 사용자를 수정하는 것이기 때문에
merge메소드를 사용합니다.
merge를 사용하게 되면, 기존 member 데이터베이스에있는 데이터를 새로 주어지는 데이터로 수정하게 됩니다.
'Web > Spring' 카테고리의 다른 글
스프링부트 이미지 저장/불러오기, thymeleaf 재 컴파일 (0) | 2023.02.14 |
---|---|
SpringBoot에서 Bcrypt와 JWT를 사용 인가와 인증(로그인), Postman 헤더에 토큰 담기 (0) | 2023.02.08 |
OAuth2.0을 통해 구글 계정 정보 받아오기 (0) | 2023.02.01 |
OAuth 2.0 이란 (0) | 2023.01.30 |
스프링 - DTO (0) | 2023.01.24 |