[JPA] 쿼리 파라미터 값으로 동적인 결과를 반환할 때 null값 처리(검색 필터링)

2023. 5. 9. 11:19JPA

예를 들어

category를 선택하고

검색을 할 수 있어서 2가지 이상으로 필터링을 한다면

'?category=운동&search=철봉' 이렇 쿼리 파라미터가 추가된다.

하지만 필터링을 한 가지만 쓴다면

 

'?category=운동&search=' 처럼 값이 없는 경우가 생길 수 있다.

이런 경우에는 컨트롤러나 서비스 계층에서

값의 유무를 체크(빈값인지)해서 null값으로 JPA 에게 보내준다.

 

//서비스 계층에서 예시
if (StringUtils.isEmpty(category))
	category = null;

if (StringUtils.isEmpty(search))
	search = null;

 

JPA를 구현한 레포지토리 계층에서는 조건절에 'IS NULL' 을 통해 NULL값이라면 무시할 수 있도록 QUERY를 구현해준다.

// 레포지토리에서 예시
@Query("select R from Result R where (:category is null or R.category=:category) and (:search is null or R.search=:search)")
List<Result> find(@Param("category") String category, @Param("search") String search);