from子句中的JPA/hibernate子查询

from子句中的JPA/hibernate子查询,hibernate,jpa,subquery,Hibernate,Jpa,Subquery,我们使用JPA和hibernate作为提供程序, 我们有一个查询,该查询在FROM子句中包含一个带有子查询的联接,但出现以下错误: org.hibernate.hql.ast.QuerySyntaxException:意外标记:近 第1行第75列[从中选择sd com.hp.amber.datamodel.entities.analysis.SnapshotDates sd,选择 maxx.changeDate maxChangeDate,x.viewId,x.state FROM com.hp

我们使用JPA和hibernate作为提供程序, 我们有一个查询,该查询在FROM子句中包含一个带有子查询的联接,但出现以下错误:

org.hibernate.hql.ast.QuerySyntaxException:意外标记:近 第1行第75列[从中选择sd com.hp.amber.datamodel.entities.analysis.SnapshotDates sd,选择 maxx.changeDate maxChangeDate,x.viewId,x.state FROM com.hp.amber.datamodel.entities.analysis.SnapshotDates x其中
x、 changeDate我不认为HQL可以在from子句中执行子查询

注意这句话:

请注意,HQL子查询只能出现在select或where子句中

我想您可以将其更改为本机查询并以这种方式执行。

您的SQL是:

从快照日期sd中选择sd, 选择maxx.changeDate maxChangeDate、x.viewId、x.state 从快照日期x开始
如果x.changeDatejpa不支持“FROM”和“SELECT”子句中的子查询,您必须更改查询并将子查询放在“WHERE”子句中。请帮助我翻译查询:选择t.order\u state、t.claim\u number、t.id FROM SELECT*FROM t\u repair\u order WHERE claim='SERCON201465't WHERE t t t t t.order\u state='Cancel'且不存在从select*from t_repair_order中选择1,其中claim_number='SERCON201465'tt,其中tt.id>t.id,tt.order_state t.order_state;
SELECT sd 
FROM SnapshotDates sd, 
     (SELECT max(x.changeDate) maxChangeDate, x.viewId, x.state 
      FROM SnapshotDates x
     WHERE x.changeDate<:date AND x.viewId in (:viewIds) AND x.state=:state
GROUP BY x.viewId, x.state) sd2
WHERE sd.viewId = sd2.viewId 
      AND sd.state = :state 
      AND sd.changeDate = sd2.maxChangeDate
SELECT sd 
FROM SnapshotDates sd, 
WHERE sd.viewId in (:viewIds)
    AND sd.state = :state
    sd.changeDate = (SELECT max(x.changeDate) FROM SnapshotDates x WHERE x.viewId = ds.viewId AND x.state = ds.state)
SELECT m FROM Professor m WHERE (SELECT COUNT(e) FROM Professor e WHERE e.manager = m) > 0
select k.* from kredits k, 
  (select client_id, max(r_date) r_date from kredits k group by client_id) k2 
where k.client_id = k2.client_id 
    AND k.r_date = k2.r_date 
order by k.id
select k From Kredit k
where k.rDate = (select MAX(k2.rDate) from Kredit k2 where k2.clientId = k.clientId)
order by k.id
select kredit0_.id as id28_, kredit0_.client_id as client59_28_ from kredits kredit0_ 
where kredit0_.r_date=(select MAX(kredit1_.r_date) from kredits kredit1_ where kredit1_.client_id=kredit0_.client_id) 
order by kredit0_.id