게으른개발자/공부
@Query Annotation 사용시 null 매개변수 무시하는 방법
goslim56
2021. 11. 22. 17:18
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