我收到作为意外令牌的错误:(
在查询下方,但此查询在SQL中正常运行
"SELECT slh.assetId,slh.mapHierarchy "
+ "FROM AssetHistory slh "
+ "INNER JOIN "
+ "(SELECT assetId, MAX(lastUpdated) AS MaxDateTime "
+ "FROM AssetHistory "
+ "GROUP BY assetId) slh2 "
+ "ON slh.assetId = slh2.assetId "
+ "AND slh.lastUpdated =slh2.MaxDateTime ";
我希望有人能帮助我.
这是错误日志:
Jan 25, 2016 4:04:32 PM org.hibernate.hql.internal.ast.ErrorCounter
reportError ERROR: line 1:89: unexpected token: ( Jan 25, 2016 4:04:32
PM org.hibernate.hql.internal.ast.ErrorCounter reportError ERROR: line
1:89: unexpected token: (
line 1:89: unexpected token: ( at org.hibernate.hql.internal.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1661)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1380)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1086)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:731)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:323)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:186)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)
at
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)
at
org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
和
ERROR: line 1:106: unexpected token: max line 1:106:unexpected
token: max at
org.hibernate.hql.internal.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1544)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1388)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1086)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:731)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:323)
at
org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:186)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)
at
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)
at
org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
at
org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at
org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at
org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
解决方法:
我认为您应该将子查询从join移到where子句.
"SELECT slh.assetId,slh.mapHierarchy "
+ "FROM AssetHistory slh "
+" WHERE (slh.assetId, slh.lastUpdated)"
+ " IN
+ "(SELECT assetId, MAX(lastUpdated) AS MaxDateTime "
+ "FROM AssetHistory "
+ "GROUP BY assetId);
标签:hql,java
来源: https://codeday.me/bug/20191027/1944378.html