Выражение в CriteriaBuilder
Для написания запроса можно использовать класс Выражение .
Например, чтобы сделать такую сумму, вы можете написать:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Number> q = cb.createQuery(Number.class);
Root<EmployeeTimekeeping > t = q.from(EmployeeTimekeeping .class);
Expression<Double> sum = cb.sum(t.<Double>get("durationMinutes"), t.<Double>get("percent"));
q.select(sum.alias("sum"));
для запроса, построенного таким образом, вы можете добавить свою спецификацию так, как хотите.
Вопрос, подобный вашему, был уже задан , из того, что я прочитал, самое простое решение для построения динамического предложения, где используется CriteriaAPI.