Skip to content

QueryDsl 적용해보기

kimhanui edited this page Jan 10, 2021 · 1 revision

QueryDsl 적용과정이 꽤 복잡했다는 기억때문에 그동안 적용하지 않고 프로젝트를 진행해왔는데(기능구현상 딱히 필요하지도 않았다)
오늘 갑자기 기능을 적용해봐야겠다는 필요성을 느꼈다. 이유는 토큰삭제 요청 때문이었다.

토큰 삭제에 해당하는 로직은 아래와 같았는데 @Query 부분에 작성한 쿼리가 잘못됐는지 토큰이 삭제되지 않았다.
또한 적절한 예외가 발생했어야하는데 예상했던 IllegalArgumentException예외도 발생하지 않았다. 즉,

  • JPQL의 DELETE문법을 따로 알아야한다는 점
  • 예상 가능한 Exception을 발생시켜야한다는 점

이 두 가지를 만족시키기 위해 QueryDsl을 적용해보기로 했다.

    // repositiory (extends JpaRepository)
    @Query("delete from FcmToken t where t.token=:token")
    void deleteByToken(@Param("token") String token);


    // service
    @Transactional
    public Long delete(String token) throws Exception {
        try {
            fcmTokenRespository.deleteByToken(token);
            return 1L;
        }catch(IllegalArgumentException e)
        {
            throw new IllegalStateException(ErrorMessage.NoExist("토큰"));
        }

    }

요청보낼 때 token이 삭제되었음에도 예외를 발생시키지 않고 1을 반환한다.
image

QueryDsl 적용하기[1]