Java Hibernate:having子句中的MySQL错误未知列,尽管列存在

Java Hibernate:having子句中的MySQL错误未知列,尽管列存在,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我在一个存储库中有一个JPQL查询,它相当于下面的MySQL查询: SELECT DISTINCT ji.* FROM tracker_job_item AS ji JOIN tracker_work AS w ON ji.id=w.tracker_job_item_id JOIN tracker_work_quantity AS wq on w.id=wq.tracker_work_id WHERE w.work_type = 'CUTTING' AND ji.is_finished=0 GR

我在一个存储库中有一个JPQL查询,它相当于下面的MySQL查询:

SELECT DISTINCT ji.* FROM tracker_job_item AS ji
JOIN tracker_work AS w ON ji.id=w.tracker_job_item_id
JOIN tracker_work_quantity AS wq on w.id=wq.tracker_work_id
WHERE w.work_type = 'CUTTING' AND ji.is_finished=0
GROUP BY wq.tracker_work_id
HAVING ji.quantity != SUM(wq.received_quantity) 
MySQL版本运行得很好,但JPQL等效版本给出了一个例外:
having子句中的未知列“jobitem0.quantity”

JPQL查询如下所示:

@Query("select distinct ji from JobItem ji" +
        "   join Work w on ji.id=w.jobItem.id" +
        "   join WorkQuantity wq on w.id=wq.work.id" +
        "   where w.workType='CUTTING' and ji.isFinished=false and ji.jobItemName like %:search%" +
        "   group by ji.id" +
        "   having ji.quantity != sum(wq.receivedQuantity)")
    Page<JobItem> findAllActiveCuttingJobs(Pageable pageable, @Param("search") String search);
@Query(“从作业项ji中选择不同的ji”+
“在ji.id=w.jobItem.id上加入工作”+
“在w.id=wq.work.id上加入工作数量wq”+
“其中w.workType='CUTTING'和ji.isFinished=false,ji.jobItemName类似%:search%”+
“按ji.id分组”+
“拥有ji.数量!=总和(wq.接收数量)”)
PageFindAllActiveCuttingJobs(可分页可分页,@Param(“搜索”)字符串搜索);

请帮助我解释为什么即使字段
quantity
存在于
JobItem

中,也无法引用having子句中不在group by子句中的列,肯定是在JPA中,并且(通常至少)在SQL中。看起来MySQL让你逍遥法外,但JPA没有

请看这里:


选择不同的*。。。GROUP BY wq.tracker_work_id
是MySQL的GROUP BY方法read()的误用。RaymondNijland我浏览了这篇文章,但我看不出我是如何误用了
GROUP BY
。你能解释一下我怎么用错了吗?如果我在MySQL中运行查询,它会给出我想要的结果,但是hibernate版本失败了。谢谢,这就解释了这一点。有没有什么推荐的方法可以改进查询以便JPQL接受它,我刚才在GROUPBY子句中添加了
ji.quantity
字段,但我不确定这样做是否正确。然而,它仍然给了我想要的结果<代码>按ji.id、ji.quantity分组查看JPA相关子查询