아이템 디테일 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();
        ```