Spring Boot/QueryDSL

null 처리( where절 동적 쿼리 )

최-코드 2024. 9. 8. 15:30

상황 : 밑에 두 개의 where 조건을 .or로 묶으려고 했는데 이때 teamNameEq에서 null을 반환하면 NullPointException이 발생했다.

private BooleanExpression teamNameEq(String teamName) {
    return hasText(teamName)? team.name.eq(teamName) : null;
}

private BooleanExpression ageGoe(Integer ageGoe) {
    return ageGoe!=null ? member.age.goe(ageGoe) : null;
}

 

해결책 : BooleanBuilder를 사용하자.

 

해결책 예시

private BooleanBuilder teamNameEq(String teamName) {
	return this.nullSafeBuilder(() -> team.name.eq(teamName));
}

private BooleanBuilder ageGoe(Integer ageGoe) {
    return this.nullSafeBuilder(() -> member.age.goe(ageGoe));
}

private BooleanBuilder nullSafeBuilder(Supplier<BooleanExpression> f){
	try{
    	return new BooleanBuilder(f.get());
    } catch(IllegalArgumentException e){
    	return new BooleanBuilder();
    }
}