[Trouble Shooting] JAP query did not return a unique result: 2 해결
문제 상황
spring boot와 jpa를 사용해 좋아요한 게시글 리스트 조회 api
를 구현하던 중, 위와 같은 에러가 발생했다.
문제 원인
이는 LikeService
에서 postId
로만 게시글을 조회해서 생기는 문제였다.
“내가” 좋아요한 게시글 리스트를 가져오고 싶었던 것이기 때문에,
postId
와 memberId
가 둘 다 일치하는 like
를 가져왔어야 한다.
기존에는 postId
만 일치하는 like
를 가져왔었기 때문에
like
가 한 개가 아닌 여러개가 조회되어 위와 같은 에러가 발생한 것이다.
예를 들어 10번 멤버와 11번 멤버가 5번 게시글을 좋아요 한 경우에,
like
는 아래처럼 2개가 생성될 것이다.
like_id | post_id | member_id
1 | 5 | 10
2 | 5 | 11
이 때, postId
가 5인 like
를 조회한다면, 총 2개가 조회 될 것이기 때문에
postId
와 memberId
가 둘 다 일치하는 1개의 like
만 가져오도록 LikeRepository
를 수정해야 한다.
해결 방법
기존의 LikeRepository를 아래와 같이 변경하였다.
기존
LikeService
Like like = likeRepository.findByPostId(postId) // postId가 일치하는 like 를 반환
.orElseThrow(() -> new CustomException(LIKE_ERROR));
LikeRepository
public interface LikeRepository extends JpaRepository<Like, Long> {
Optional<Like> findByPostId(long postId);
}
변경
LikeService
Like like = likeRepository.findByMemberIdAndPostId(member.getId(), postId) // postId와 memberId 둘 다 일치하는 like 를 반환
.orElseThrow(() -> new CustomException(LIKE_ERROR));
LikeRepository
public interface LikeRepository extends JpaRepository<Like, Long> {
Optional<Like> findByMemberIdAndPostId(long memberId, long postId);
}
Ref.
💛 개인 공부 기록용 블로그입니다. 👻