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();
}
}