일반적인 로직적용
.use(jpa 조건절에서 and 속에서 or사용하기)
silvergoni
2020. 12. 20. 00:58
반응형
고민
jpa문법에서 Specification을 사용하는데 쿼리로 간단한 select문 표현이 어려웠다.
예로들면 다음과 같은 구문에서 저기 OR표현이 하고 싶었다.
select * from logs where startDate<#{now} AND (endDate is NULL OR endDate > #{now})
결론
- b.or(...)을 통해 해결하였다.
접근방법
#SQL
select * from logs where startDate<#{now} AND (endDate is NULL OR endDate > #{endDate})
#Specification
.and(endDate == null ? null : (r, q, b) -> b.or(b.isNull(r.get(MyModel.END_DATE)), b.greaterThanOrEqualTo(r.get(MyModel.END_DATE), endDate)))