-
ExistsBy쿼리를 직접 작성하기Spring 2022. 3. 4. 22:33
프로젝트 리팩토링을 진행하면서 연관관계의 데이터를 이용하여 데이터의 존재여부를 확인하는 경우가 필요하였다.
JPA를 이용하면 "existsBy대상"을 통해서 작성하면 알아서 쿼리를 날려주지만,
나의 경우 처음에는 잘 작동하다가 갑자기 뒷부분의 toUserId 부분을 읽지 못하는 상황이 발생했다.
(해당부분의 원인이 id를 Id로 작성하거나 대소문자의 구분이 잘 이루어지지 않아서(카멜표기법을 사용해야 함)라고 하여서 확인했으나
명확한 원인을 아직 발견하지 못했다. 😭)
우선 해결을 위하여 쿼리를 직접 구현해주어야 했다.
existsBy 쿼리 작성
@Query(value = "SELECT CASE WHEN count(a) > 0 THEN true ELSE false END FROM Apple a WHERE a.연관관계id=:파라미터", nativeQuery = true)
위와 같은 형식으로 count and then을 이용하여 작성해주면된다.
@Query(value = "SELECT CASE WHEN count(f) > 0 THEN true ELSE false END FROM Follow f LEFT JOIN FETCH f.fromUser a LEFT JOIN FETCH f.toUser b WHERE a.id=:fromUserId AND b.id=:toUserId", nativeQuery = true) boolean existsByFromUserIdAndToUserId(Integer fromUserId, Integer toUserId);
나의 경우에는 위와 같이 nativequery=true 옵션까지 작성해주니 정상적으로 동작이 되었다.
( 참고한 사이트 )
https://stackoverflow.com/questions/30392129/spring-data-jpa-and-exists-query
'Spring' 카테고리의 다른 글