BACKEND/Trouble Shooting

query did not return a unique result

이-프 2023. 12. 21. 12:36

문제

Hibernate: select r1_0.room_product_id,r1_0.created_at,r1_0.deleted_at,r1_0.room_id,r1_0.start_date,r1_0.stock,r1_0.updated_at from room_product r1_0 where r1_0.stock=?
2023-11-30T02:25:31.374Z ERROR 40009 --- [nio-8080-exec-1] c.a.global.error.GlobalExceptionHandler  : query did not return a unique result: 27485
@Query("select rp from RoomProduct rp where rp.room.id = :roomId and rp.startDate =:startDate and rp.stock > 0")
    List<RoomProduct> findByRoomIdAndStartDate(@Param("roomId") long roomId,
        @Param("startDate") LocalDate startDate);

문제해석

  • List<RoomProduct>에서 만약 해당 RoomProduct가 없다면, null이 select되는데 List는 null체크를 해주지 않으므로 NullPointException이 발생할 수 있다.

해결방안

@Query("select rp from RoomProduct rp where rp.room.id = :roomId and rp.startDate =:startDate and rp.stock > 0")
    Optional<RoomProduct> findByRoomIdAndStartDate(@Param("roomId") long roomId,
        @Param("startDate") LocalDate startDate);
  • NullPointException을 해결할 수 있도록 Optional 객체로 반환하도록 한다.
RoomProduct roomProduct = roomProductRepository.findByRoomIdAndStartDate(
room_id, roomCartRequest.getStartDate()).orElseThrow(RoomProductNotFoundException::new);
  • Optional 반환 타입이므로, orElseThrow를 통해, null일 경우 예외처리를 해줄 수 있도록 한다.

Uploaded by N2T

'BACKEND > Trouble Shooting' 카테고리의 다른 글

UnsupportedOperationException  (0) 2023.12.21
MultiBagFetchException  (1) 2023.12.21
UnsupportedTemporalTypeException HH:MM  (0) 2023.12.21
Jackson 직렬화 제한자 문제  (0) 2023.12.21
stackOverFlow Error  (0) 2023.12.21