当前位置: 首页 > 知识库问答 >
问题:

JPQL中JoinColumn的查询值

谢承
2023-03-14

我有两个JPA实体

public class Job {
  @ManyToOne
  @JoinColumn(name = "service")
  public Service service;

  @Column(name = "queue_time")
  public Long queueTime;

  @Column(name = "run_time")
  public Long runTime;
}

public class Service {
  @Id
  @Column(name = "id")
  public Long id;

  @Column(name = "name")
  public String name;

  @Column(name = "host")
  public String host;
}

现在我想用JPQL做一些聚合查询:

SELECT job.service.id, AVG(job.queueTime), AVG(job.runTime) FROM Job job GROUP BY job.service.id

得到的SQL查询(我使用的是MySQL数据库)如下所示:

SELECT t0.id, AVG(t1.queueTime), AVG(t1.runTime) FROM Service t0, Job t1 WHERE (t0.service = t1.id) GROUP BY t0.id
SELECT t1.service, AVG(t1.queueTime), AVG(t1.runTime) FROM Job t1 GROUP BY t1.service
SELECT job.service, AVG(job.queueTime), AVG(job.runTime) FROM Job job GROUP BY job.service
SELECT t0.id, t0.name, t0.host AVG(t1.queueTime), AVG(t1.runTime) FROM Service t0, Job t1 WHERE (t0.service = t1.id) GROUP BY t0.id, t0.name, t0.host

共有1个答案

许嘉福
2023-03-14

这个问题解决了我的问题:我如何从JPA ManyToOne映射中检索外键而不击中目标表?

我采取了第二个解决方案(b)为FKs使用只读字段)

 类似资料:
  • 问题内容: 如何限制JPQL命名查询的选择查询?我需要在查询级别本身而不是在Java层中完成限制!!!我正在尝试使用 但徒劳!!! 请建议 问题答案: 没有提供限制查询的机制。这通常是通过使用上的方法来实现的。如果必须避免在Java代码中指定此内容,则可以在包含查询并执行限制的数据库中进行查看。然后像将表一样将实体映射到此视图。 例:

  • 我想知道是否有可能通过spring jpa存储库执行jpql查询,并能够使用分页作为排序功能,就像使用示例和规范一样。我想做一些类似的事情: QueryByQuestpleExector接口,即声明: JpaSpecificationExector接口声明:

  • 我想知道JPQL是否可以嵌套查询。我正在学习Spring Data JPA,我也上传了几个相关的问题。 如果MySQL中有以下sql,我如何生成JPQL: 我有两个实体。 上面的实体有一个@OneTo多集合,集合实体在下面。 我想得到不到10个孩子的作弊实体。

  • 问题内容: 我遇到了麻烦。 有一个实体发行人与与实体镇的ManyToMany关系有关: 那么实体镇也与地区有关 现在,我必须过滤(使用jpql)一个区域中的所有分发服务器。我能怎么做? 问题答案: 请参阅:https://en.wikibooks.org/wiki/Java_Persistence/JPQL

  • 我试图将我的Mysql查询转换为JPQL,但我不知道哪个工具可以在eclipse上使用而无需编译。 我的日志没有告诉我哪里是错误,所以我找不到哪里是错误的语法。 谢谢你的帮助!

  • 问题内容: 我正在写一个JPQL查询,它基于 Categories 集合进行查询。我的类别可以为空,因此我正在使用:categories = NULL进行检查。 当类别为NULL时,以上方法可以正常工作。但是,当类别超过一个值时,我得到了错误 java.sql.SQLException:操作数应包含1列 与hibernate有关的痕迹是 (?,?)或(?,?)中的category6_.catego