JPQL агрегатные функции со спецификациями - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно сделать JPQL-запрос с агрегатными функциями, используя Спецификации. Я хотел бы что-то вроде

myQuery="select sum(et.durationMinutes/et.percent) from EmployeeTimekeeping et"
myQuery.where(specifications)
myQuery.getResultList();

Я пытаюсь использовать объект спецификаций вместо предложения where. Есть ли способ сделать что-то подобное?

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Выражение в 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.

...