我可以在JPA中对@Query使用嵌套查询吗?

时间:2019-02-27 17:18:06

标签: java spring hibernate jpa spring-data-jpa

我有一个任务实体,其中包含公司中所有用户的任务。所以是@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 :(得分:1)

您不能在@Query内使用dbms的特定功能,因为它将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的第二个参数。

@Billy Frost 注意到,在nativeQuery上添加@Query标志为true也是一种选择。