JPQL查询报错,生成的SQL语句on关键字后无关联条件如何解决
问题原因
你编写的JPQL不符合JPA语法规范,JPQL做关联查询时不能直接JOIN目标实体类,必须基于已查询实体的关联属性建立关联关系。你直接写JOIN Allele a JOIN Locus l没有指定关联的上游实体属性,JPA无法识别外键关联逻辑,最终生成的SQL就会出现ON后无关联条件的语法错误。
解决方案
有两种修正方式,优先选择第一种即可:
方式1:通过实体关联属性级联查询(推荐)
直接复用实体类中已经定义的关联属性做关联,JPA会自动根据@JoinColumn配置生成正确的关联条件,修正后的JPQL如下:
SELECT m FROM Motif m JOIN m.allele a JOIN a.locus l WHERE a.allele = :allele AND l.locus = :locus ORDER BY m.seqNo
方式2:手动指定关联条件
如果需要直接关联实体类,可以手动在JOIN后补充ON条件指定关联字段,写法如下:
SELECT m FROM Motif m JOIN Allele a ON m.allele.id = a.id JOIN Locus l ON a.locus.id = l.id WHERE a.allele = :allele AND l.locus = :locus ORDER BY m.seqNo
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

