【问题标题】:Can I use nested queries with @Query in JPA?我可以在 JPA 中使用带有 @Query 的嵌套查询吗?
【发布时间】:2019-07-21 12:07:30
【问题描述】:

我有一个任务实体,它包含公司中所有用户的任务。所以这是@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
")

它抛出异常 "unexpected token: (" 我错过了什么?

【问题讨论】:

  • 为什么不将其创建为本机查询?例如@Query(value="YOUR_QUERY", nativeQuery=true)

标签: java sql spring postgresql jpql


【解决方案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 标记为 true 到 @Query 也是一种选择。

【讨论】:

  • 啊,是的,这也是一种选择;)
猜你喜欢
  • 2021-06-07
  • 2014-10-07
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多