JPQL中的多个内部联接

时间:2018-05-22 09:41:37

标签: spring-boot spring-data-jpa jpql

我一直在尝试编写jpql查询,但获得异常,

  

引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:*靠近第1行第8列[SELECT * FROM com.highpeak.tlp.datastore.model.TaskRequestModel trm inner join trm.task t inner join trm.task.matterId m inner join trm.task.matterId.client c其中trm.isActive为true且trm.task.isActive为true且trm.task.matterId.isActive为true且trm.task.matterId.client .isActive是真的trm.requestedFor =:所有者顺序由trm.createdAt DESC]

我的查询是

SELECT * FROM TaskRequestModel trm inner join trm.task t 
inner join trm.task.matterId m inner join trm.task.matterId.client c 
where trm.isActive is true and trm.task.isActive is true and 
trm.task.matterId.isActive is true and 
trm.task.matterId.client.isActive is true trm.requestedFor =:owner 
 order by trm.createdAt DESC"

可能是什么问题?

更新 我甚至试过

SELECT * FROM TaskRequestModel trm inner join trm.task t inner join 
t.matterId m inner join m.client c where trm.isActive is true and 
t.isActive is true and m.isActive is true and c.isActive is true and 
trm.requestedFor =:owner  order by trm.createdAt DESC

1 个答案:

答案 0 :(得分:2)

我不确定is true是否有效JPQL(它肯定不是有效的SQL)。所以你应该直接在WHERE子句中断言列,如果它们是布尔值的话。除此之外,您还错过了AND子句中的WHERE。将所有这些放在一起,并删除不正确的GROUP BY子句就可以了:

SELECT *
FROM TaskRequestModel trm
JOIN trm.task t 
JOIN trm.task.matterId m
JOIN trm.task.matterId.client c 
WHERE
    trm.isActive AND
    trm.task.isActive AND 
    trm.task.matterId.isActive AND
    trm.task.matterId.client.isActive AND
    trm.requestedFor =:owner 
ORDER BY trm.createdAt DESC