요즘 회사에서 ibatis로 이루어진 쿼리문을 querydsl로 포팅하는 작업을 하고 있다.
작업을 하다보니, 임의로 null을 넣어줘야 하는 경우가 생겼다.




new CaseBuilder()
    .when(
        numberPath(BigInteger.class, LST_IMG_CNT).gt(BigInteger.valueOf(0))
    )
    .then(
        numberPath(BigInteger.class, LST_IMG_CNT)
    )
    .otherwise(
        [NULL]
    ).as(LIST_COLOR_CNT)



바로 이런 경우였다…!!
casebuilder의 경우에는 otherwise를 무조건 표시해야 하는데,
그냥 null 로 넣었더니 오류를 뱉었다….

The method otherwise(BigInteger) is ambiguous for the type CaseBuilder.Cases<BigInteger,NumberExpression<BigInteger>>

타입이 안맞는다는 거였다….
하지만 나는 0이 아닌 null이 넣고 싶었는데, BigInteger 타입과 충돌이 난다고 하니까 아찔해졌다…ㅠㅠㅠ
그래서 열심히 검색을 해본 결과
Querydsl에서는 공식적으로 null에 대해서 NullExpression.DEFAULT 클래스로 사용하길 권장한다고 한다.
그래서 null 대신 nullExpression()으로 넣어줬더니 오류가 말끔하게 해결됐다….!!!
querydsl 에서 null을 인식하지 못할 경우, nullExpression()을 쓰자! ㅎㅎㅎ



new CaseBuilder()
    .when(
        numberPath(BigInteger.class, LST_IMG_CNT).gt(BigInteger.valueOf(0))
    )
    .then(
        numberPath(BigInteger.class, LST_IMG_CNT)
    )
    .otherwise(
        nullExpression()
    ).as(LIST_COLOR_CNT)