原生SQL:hibernate
select `user`.id, `user`.`name`,dept.name deptName,sum(sd.score) SumScore对象
from `user`io
LEFT JOIN
score_detail sd
ON
`user`.id = sd.user_id ast
LEFT JOIN
department dept
ON
`user`.department_id = dept.idList
GROUP BY `user`.`id` ORDER BY sum(sd.score);select
通过查阅多方资料得知,异常
异常: org.hibernate.hql.ast.QuerySyntaxException: Path expected for joinco
HQL是面向对象的,因此join的条件是反映在对象的关系中的,因此,你在用join的时候,不管是left join仍是right join,都是join
FROM DomainA a LEFT JOIN a.b b WHEREtar
或者
FROM DomainA a RIGHT JOIN a.b b WHERE
而不能直接是两个对象直接JOIN。
最终结果:
@Query("SELECT NEW com.ygsm.pojo.vo.SumScoreRankVO(u.id, u.name, d.name, SUM(s.score)) " + "FROM ScoreDetail s " + "RIGHT JOIN s.user u " + "RIGHT JOIN u.department d " + "WHERE s.createDate BETWEEN ?1 AND ?2 " + "GROUP BY u.id " + "ORDER BY SUM(s.score) DESC") List<SumScoreRankVO> findUserScoreRank(Date startDate, Date endDate);