아이템 디테일 API - 좋아요 표시 관련 에러
2023. 5. 8. 23:58ㆍ프로젝트 개발 및 운영 이슈
(2021년 작성됨)
문제 상황 : 아이템을 좋아요 요청, 취소한 후 아이템 디테일 페이지 확인 시 아이템 데이터를 불러오지 못함.
- Sentry.io를 통해서 에러 로그 확인 →
querydsl
에서.fetchOne()
호출한 결과가 유니크하지 않다는 에러
javax.persistence.NonUniqueResultException: query did not return a unique result: 2
- DB에서 user_item 테이블을 조회해보니, 실제로 데이터가 두개 나왔다.
위처럼 하나가 나와야하는데, 좋아요를 했는지 여부인 col_1_0_
값이 0, 1인 데이터 두개가 출력되었음.
- 수정 전 querydsl
queryFactory.select(item, new CaseBuilder().when(userItem.user.id.eq(userId)).then(1L).otherwise(0L))
.from(item)
.leftJoin(userItem).on(userItem.item.eq(item))
.where(item.id.eq(itemId))
.fetchOne();
- 수정 후 querydsl -
.groupBy()
와.sum()
를 통해 해결했다.
queryFactory.select(item, new CaseBuilder().when(userItem.user.id.eq(userId)).then(1L).otherwise(0L).sum())
.from(item)
.leftJoin(userItem).on(userItem.item.eq(item))
.where(item.id.eq(itemId))
.groupBy(item)
.fetchOne();
'프로젝트 개발 및 운영 이슈' 카테고리의 다른 글
Spring-boot JPA/Hibernate N+1 문제 (batch 설정) (0) | 2023.05.09 |
---|---|
Nginx 파일 용량 제한 문제 (CORS) (0) | 2023.05.09 |
DB에 데이터 인서트 시 이모지 포함하는 경우 SQL (0) | 2023.05.09 |