상황 : 밑에 두 개의 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();
}
}
'Spring Boot > QueryDSL' 카테고리의 다른 글
| QueryDSL4RepositorySupport (0) | 2024.08.31 |
|---|---|
| 실무 활용 - 스프링 데이터 JPA와 Querydsl (0) | 2024.08.31 |
| 실무 활용 - 순수 JPA와 QueryDSL (0) | 2024.08.29 |
| Spring Boot QueryDSL 중급 문법 (0) | 2024.08.24 |
| Spring Boot QueryDSL 기본 문법 (0) | 2024.08.13 |