본문 바로가기
TIL

Plmography 프로젝트 작업 로그 #41 - JPQL 에서 exists 문법 사용하기 (23.01.31 TIL)

by winteringg 2023. 1. 31.

오늘은 팔로우, 팔로우 취소 기능을 구현하면서 발생한 이슈에 대해 기록해보자.

일단 내가 원한 것은 팔로우 혹은 팔로우 취소를 누르면 만들어놓은 메서드를 통해 DB 에서 id 값을 조회해서 status 가 true 혹은 false 로 변경되는 플래그를 만드는 것이었다. 그래서 JPA 에서 지원하는 existsBy 메서드를 아래와 같이 만들고 어플리케이션을 실행시켜 보았는데 플래그에는 전혀 변경되는 사항이 없었다.

boolean existsByUserIdAndFollowingId(UserId userId, FollowingId followingId);

그래서 조금 더 쿼리문을 정확히 해주기 위해 JPQL 을 사용했는데, 아래와 같은 오류가 떴다. 확인해보니 JPQL 에서는 select exists 문법은 지원하지 않는다고 한다. (where 절의 exists 는 사용 가능)

그래서 아래와 같이 개수를 세어주는 count 로 방향을 틀어 쿼리문을 작성해주니 플래그의 true, false 스위칭이 잘 동작되었다!

@Query("select count(s.followingId) > 0 from Subscribe s where s.userId = :userId and s.followingId = :followingId")
boolean existsByUserIdAndFollowingId(UserId userId, FollowingId followingId);

댓글