QueryDSL 값이 존재하는지 boolean 값만 반환하고 싶을때.
보통 쿼리에서 true/false 값만 반환한다고 하면..
해당 값이 존재하는지 아닌지의 여부만 판단하고 싶을 때 일 것이다.
여느 때와 같이 queryDSL 을 짜고 있었는데 ...
값이 존재하는지 아닌지 여부만 반환하고 싶은데,
CASE 문을 통해서 해야 하나?
public boolean hasRegisteredUser(Long custGroupSeq) {
return jpaQueryFactory.select(
new CaseBuilder()
.when(custGroup.count().gt(0).then(true)
.otherwise(false)
)
.from(custGroup)
.where(custGroup.custGroupSeq.eq(custGroupSeq))
.fetchOne();
}
처음엔 이렇게 쿼리를 짰었는데..
"Unboxing of * may produce 'NullPointerException
이런 찝찝한 경고문이 떠서 이 방법은 안전하지 않은 것 같았다.
답은 생각보다 간단하게 나왔다.
마지막에 fetch().size() > 0 을 붙여보고 깨달았다.
그냥 이렇게 하자.
참고문서 (나랑 비슷한 고민을 한 개발자가 있었다.)
https://stackoverflow.com/questions/64910252/querydsl-how-to-use-exist-to-return-boolean
결론
public boolean hasRegisteredUser(Long custGroupSeq) {
return !jpaQueryFactory
.selectFrom(custGroup)
.where(custGroup.custGroupSeq.eq(custGroupSeq))
.fetch().isEmpty();
}
쿼리가 훨~씬 깔끔해지고 안정성도 올라갔다!
'Framework > Spring' 카테고리의 다른 글
[QueryDSL]엔티티를 DTO로 변환할 때, PUBLIC을 적용하자. (0) | 2024.06.26 |
---|---|
@ReqeustBody 바인딩시 boolean타입의 변수명 앞에 is를 붙이면 안되는 이유 (0) | 2024.06.26 |
Spring Security 란? (0) | 2024.05.12 |
[Spring] Model vs ModelMap (0) | 2024.04.01 |
[Spring(intellij)-React 연동] Gradle 프로젝트로 연동하기 (0) | 2022.06.01 |