我有一个任务实体,其中包含公司中所有用户的任务。所以是@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
")
它引发异常“意外令牌:(” 我想念什么?
答案 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也是一种选择。