아이템 디테일 API - 좋아요 표시 관련 에러
아이템 디테일 API - 좋아요 표시 관련 에러
문제 상황 : 아이템을 좋아요 요청, 취소한 후 아이템 디테일 페이지 확인 시 아이템 데이터를 불러오지 못함.
- Sentry.io를 통해서 에러 로그 확인 →
querydsl
에서.fetchOne()
호출한 결과가 유니크하지 않다는 에러
**해당 에러 문구**
### **NonUniqueResultException**
```
javax.persistence.NonUniqueResultException: query did not return a unique result: 2
```
- DB에서 user_item 테이블을 조회해보니, 실제로 데이터가 두개 나왔다.
![20210715.png](https://github.com/Ting-Kim/Ting-kim.github.io/blob/main/images/20210715.png?raw=true)
- 위처럼 하나가 나와야하는데, 좋아요를 했는지 여부인 `col_1_0_` 값이 0, 1인 데이터 두개가 출력되었음.
- 수정 전 querydsl
```java
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()` 를 통해 해결했다.
```java
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();
```