공부공부님 아쉽게도 ExpressionUtils.allOf를 사용해도 null처리는 따로 해주어야 합니다^^
다음 코드를 보시면 이해가 되실꺼에요.
return ExpressionUtils.allOf(member.age.eq(age), member.roleName.eq(roleName));
이렇게 풀어보면 member.age.eq(null) 이렇게 되는데, eq() 자체가 null을 받으면 예외가 발생합니다.
감사합니다.
안녕하세요. 참치캔님 하나씩 답변 달아드릴게요.
1.
nullSafeBuilder
메서드는 다른 메서드처럼 private 인스턴스로 안 만드시고,
public static
메서드로 설계하셨는데 이 부분에 대해서 혹시 설명을 들어볼 수 있을까요??!
-> 아~ 이것은 nullSafeBuilder를 공통으로 사용할 수 있는 유틸리티 클래스로 뽑아서 사용하라는 의미였습니다. 이 코드상에서는 private으로 하셔도 됩니다.
2.
nullSafeBuilder
메서드에서catch로 NPE가 아닌
IllegalArgumentException
을 잡으신 이유에 대해서 궁금합니다!
Querydsl이 IllegalArgumentException을 호출합니다. 그래서 해당 예외를 잡았습니다.
public BooleanExpression eq(T right) {
if (right == null) {
throw new IllegalArgumentException("eq(null) is not allowed. Use isNull() instead");
} else {
return eq(ConstantImpl.create(right));
}
혹시 만약
nullSafeBuilder
메서드를
다른 클래스
에서도 사용하려고 만드신거면
nullSafeBuilder
메서드는 어느 클래스나, 패키지에 귀속되는 게 맞을까요..??!!
-> 네 공통으로 적절하게 두시면 됩니다^^ 사실 계층을 명확하게 나눈다면 repository의 구현과 관련된 곳에 두는 것이 좋습니다.
감사합니다.
강사님 질문을 보다가 저도 궁금한게 생겨서 질문남겨봅니다..!
1.
nullSafeBuilder
메서드는 다른 메서드처럼 private 인스턴스로 안 만드시고,
public static
메서드로 설계하셨는데 이 부분에 대해서 혹시 설명을 들어볼 수 있을까요??!
2.
nullSafeBuilder
메서드에서catch로 NPE가 아닌
IllegalArgumentException
을 잡으신 이유에 대해서 궁금합니다!
혹시 만약
nullSafeBuilder
메서드를
다른 클래스
에서도 사용하려고 만드신거면
nullSafeBuilder
메서드는 어느 클래스나, 패키지에 귀속되는 게 맞을까요..??!!
감사합니다!