16 марта 2019
Для выполнения условной логики в SQL SELECT
, можно использовать выражение CASE
. Следующий SQL хак позволит вам выполнить условный count()
для вашего запроса.
Например, чтобы выбрать количество записей с id > 5
:
SQL:
SELECT SUM(CASE WHEN id > 5 THEN 1 ELSE 0 END) FROM Table
JPQL:
entityManager.createQuery("SELECT SUM(CASE WHEN b.id > 5 THEN 1 ELSE 0 END) FROM BlogEntity b").getSingleResult()
Criteria API:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Number> query = cb.createQuery(Number.class);
Root<BlogEntity> blogEntity = query.from(BlogEntity.class);
query.select(
cb.sum(
cb.<Number>selectCase()
.when(cb.gt(blogEntity.get("id"), 5), 1)
.otherwise(0)
)
);
Number result = em.createQuery(query).getSingleResult();
Исходный код, доступен на GitHub