我正在尝试获取每个EmergencyJob
执行的最后Employee
(即具有最大结束时间的那个)。
我有以下实体
EmergencyJob
@Entity
@Table(name = "emergencyjobs", schema = "simulator")
public class EmergencyJob {
@Id
private String jobId;
private LocalDate dateLogged;
private LocalTime timeLogged;
private double easting;
private double northing;
private String priority;
private Point location;
@ManyToOne
private Engineer assignedEngineer;
private LocalTime startTime;
private LocalTime endTime;
...
}
工程师
@Entity
@Table(name = "engineer", schema = "simulator")
public class Engineer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int engineerId;
private Point homeLocation;
...
}
这些表是由Hibernate生成的,我可以使用以下查询在数据库中执行我需要的操作:
SELECT e.*
FROM simulator.emergencyjobs AS e
INNER JOIN (
SELECT
assigned_engineer_engineer_id,
max(end_time) as end_time
FROM simulator.emergencyjobs
GROUP BY assigned_engineer_engineer_id
) AS ee
ON e.assigned_engineer_engineer_id = ee.assigned_engineer_engineer_id
AND e.end_time = ee.end_time
但我无法弄清楚如何使用它来检索Hibernate中EmergencyJob
个实体的列表。
任何帮助将不胜感激!
答案 0 :(得分:1)
这应该可以解决(获取是可选的):
select ej
from emergencyJob ej
inner join fetch ej.assignedEngineer e
where ej.endTime = (select max(distinct sej.endTime)
from emergencyJob sej
where sej.assignedEngineer = e)
还要记住在EmergencyJob
实体上定义连接列:
@ManyToOne
@JoinColumn(name = "assigned_engineer_engineer_id")
private Engineer assignedEngineer;