我有一张名为“位置”的桌子,我正在捕捉员工的经纬度。位置表包含以下字段: id,employee_id(FK到员工表),纬度,经度,created_date。此表包含具有不同created_date的employee_id的许多条目。现在,从位置表我想要所有员工的条目及其最新创建日期。也就是说,位置表可能包含在1月1日和1月2日创建的employee_id 1的两个条目。生成的查询应仅返回employee_id 1的Jan 2nd条目。同样,我希望当前列在位置表中的所有员工都有条目。
在MySQL中进行以下查询后执行此操作:
SELECT loc1.* FROM location loc1 LEFT OUTER JOIN location loc2
ON (loc1.employee_id = loc2.employee_id AND
(loc2.createdDate > loc1.created_date AND loc2.id > loc1.id))
where loc2.employee_id is null;
现在,当我在Spring Data JPA中运行与HQL查询相同时,查询变为如下:
SELECT loc1 FROM location loc1 LEFT OUTER JOIN location loc2 ON
(loc1.employee= loc2.employee AND
(loc2.createdDate > loc1.createdDate AND loc2.id > loc1.id))
where loc2.employee is null
我得到了
“引起:org.hibernate.hql.internal.ast.QuerySyntaxException:期望加入的路径!”
当使用相同的表进行连接时,如何给出路径?
答案 0 :(得分:0)
如果在实体之间定义了JPA关系,请参阅How to perform left join in Hibernate Query Language?
答案 1 :(得分:0)
我认为您可以使用HQL
子句而不是EXISTS
重新编写LEFT JOIN
个查询,如下所示:
SELECT loc1 FROM location loc1
WHERE NOT EXISTS(
SELECT 'NEXT'
FROM location loc2
WHERE loc2.employee = loc1.employee
AND loc2.createdDate > loc1.createdDate AND loc2.id <> loc1.id
)