Google 태그 관리자 아이콘

일반적인 로직적용

.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)))

참고

https://stackoverflow.com/questions/15610094/jpa-find-entities-where-date-is-between-start-and-end-date-that-can-be-null-usin