Могу ли я использовать вложенные запросы с @Query в JPA? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть объект задачи, который содержит все пользовательские задачи в компании.так что это @ManytoOne отношения.(многие задачи принадлежат конкретному пользователю)

Я хочу вычислить сумму:

(task_sum_of_user1 - avg)^2 + (task_sum_of_user2 - avg)^2 + .... (task_sum_of_user_N - avg)^2

Я проверил запрос в базе данных Postgresql, и этот работает:

select sum(v.t_sum) from(select (s.user_tasks + 10)^2 t_sum from (select count(*) user_tasks from Task t GROUP BY t.employee_id) s) v

Но когда я запускаю запрос в аннотации @Query, он, похоже, не работает:

@Query("select sum(v.t_sum) from(select (s.user_tasks + 10)^2 t_sum from (select count(*) user_tasks from Task t GROUP BY t.employee_id) s) v
")

выдает исключение "неожиданный токен: (" Чего мне не хватает?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не можете использовать специальные функции dbms внутри @Query, так как jpql принимает значение value.Вы можете создать собственный @Repository с собственным запросом, например:

entityManager
    .createNativeQuery("select sum(v.t_sum) from(select (s.user_tasks + 10)^2 t_sum from (select count(*) user_tasks from Task t GROUP BY t.employee_id) s) v")
    .getSingleResult();

Вам необходимо каким-то образом отобразить результат или предоставить его как второй параметр createNativeQuery.

Как @ Билли Фрост заметил, добавив флаг nativeQuery как true для @Query также вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...