Hibernate:虽然列存在,但在having子句中有MySQL错误未知列

时间:2018-01-04 14:06:16

标签: 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
GROUP BY wq.tracker_work_id
HAVING ji.quantity != SUM(wq.received_quantity) 

MySQL版本工作得很好,但JPQL等价物提供了一个例外:Unknown column 'jobitem0_.quantity' in 'having clause'

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);

即使quantity中存在JobItem字段,也请帮我解决错误原因。

1 个答案:

答案 0 :(得分:1)

您不能引用having子句中不在group by子句中的列,绝对是在JPA中,并且(通常至少在SQL中)。看起来MySQL让你逃脱它,但JPA不是。

见这里:

http://learningviacode.blogspot.co.uk/2012/12/group-by-and-having-clauses-in-hql.html