[英]How to write this PostgreSQL query in jpa specification or criteria query?
i need to implement the following query as a jpa specification or criteria query?我需要将以下查询实现为 jpa 规范或条件查询?
Please let me know how this can be done using inner joins and also a group by clause.请让我知道如何使用内部联接和 group by 子句来完成此操作。
select SUM(r.story_points) as SP,count(r.user_id) as mx,r.user_id,e.component_id from task r inner join component e on r.component_id =e.component_id group by r.user_id,e.component_id; select SUM(r.story_points) as SP,count(r.user_id) as mx,r.user_id,e.component_id from task r inner join component e on r.component_id =e.component_id group by 8818122589.component_id_id_89,e.component_id group by r 内部连接组件e ;
My Task Entity:我的任务实体:
package com.sysco.sprintreporting.entity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.*;
import javax.persistence.*;
import java.time.LocalDate;
@Entity
@Table(name = "Task")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Task {
@Id
@Column(name = "issue_key")
private String issueKey;
@Column(name = "issue_id")
private long issueId;
@Column(name = "issue_type")
private String issueType;
@Column(name = "storyPoints")
private Double storyPoints;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "user_id")
@JsonBackReference
private User assignee_id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "component_id")
@JsonBackReference
private Component component_id;
}
My Component Entity:我的组件实体:
package com.sysco.sprintreporting.entity;
import java.util.Set;
import javax.persistence.*;
import lombok.*;
@Entity
@Table(name = "Component")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Component {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "component_id")
private int id;
@Column(name = "component_name")
private String name;
@Column(name = "component_desc")
private String description;
@OneToMany(mappedBy = "component_id", cascade = CascadeType.ALL)
private Set<Task> Task;
}
To do an aggregated query with joins with Criteria Query API you can use Tuple Query .要使用Criteria Query API进行聚合查询,您可以使用Tuple Query 。 Tuple Query allows to select multiple values/columns with multiselect method.
元组查询允许使用多选方法 select 多个值/列。
Something like this (not tested):像这样的东西(未测试):
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> mainQuery = cb.createTupleQuery();
Root<Task> rootTask = mainQuery.from(Task.class);
Join<Task, Component> componentJoin = rootTask.join("component_id");
mainQuery.multiselect(
rootTask.get("user_id"),
componentJoin.get("component_id"),
cb.sum(rootTask.get("story_points").alias("SP"),
cb.count(rootTask.get("user_id")).alias("mx")
);
mainQuery.groupBy(
rootTask.get("user_id"),
componentJoin.get("component_id")
);
TypedQuery<Tuple> query = entityManager.createQuery(mainQuery);
List<Tuple> tasks = query.getResultList();
You can see some examples of using Tuple Query: JPA Criteria API - Multiple Query selection and use of Tuple您可以看到一些使用 Tuple Query 的示例: JPA Criteria API - Multiple Query selection and use of Tuple
Regards.问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.