본문 바로가기

게으른개발자/공부

@Query Annotation 사용시 null 매개변수 무시하는 방법

 

 

JPA로 구성된 레퍼지토리에서 @Query Annotation 을 사용하여 쿼리를 작성할 경우 
매개변수로 null 이 넘어 오면 아래와 같이 null 조건이 검색된다.

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {

  @Query("SELECT m FROM Member m WHERE m.name = :name")
  List<Member> findByName(String name);

  // name 으로 null 이 넘어온경우 -> SELECT * FROM Member  WHERE name = null

}

 

 

만약 null 로 매개변수가 올경우 무시하고 싶다면 아래와 같이 구성하면된다.

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
  @Query("SELECT m FROM Member m WHERE (:name is null or m.name = :name)")
  List<Member> findByNameFilter(String name);

//   name 이 null 인 경우 -> SELECT * FROM Member  WHERE null is null or name = null;   -> null is null  이 항상 참이므로 뒤에 조건은 보지 않는다
//   name 이 null 이 아닌경우 -> SELECT * FROM Member  WHERE '회원1' is null or name = '회원1';
}

 

참조: https://www.baeldung.com/spring-data-jpa-null-parameters