2016-01-26 3 views
2

Я получаю сообщение об ошибке, как неожиданный знак :( ниже запроса, но этот же запрос работает нормально в SQLнеожиданный маркер: (в HQL

"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)

ответ

1

Я думаю, вам следует переместить подзапрос из условия join to 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); 
2

Я думаю, что HQL не поддерживает подзапросы в статье FROM.

14.13. Subqueries

Обратите внимание, что HQL подзапросы могут произойти только в избранных или где положениях.

+1

Да, вы правы, hql не поддерживает вспомогательные запросы в предложении FROM, . Sub-запросы должны быть WHERE или SELECT clause –

Смежные вопросы