【问题标题】:Error while executing hql query执行 hql 查询时出错
【发布时间】:2018-12-14 16:25:42
【问题描述】:

我在使用执行 hql 查询时遇到错误

Query query = session.createQuery(q);

我的查询是

select AU_USER from AU_TABLE where AU_ID in(010012025160151756912703600209,010012025160150254316794700103)

堆栈跟踪是

2018-07-06 11:25:05 错误 ErrorCounter:54 - 第 1:74 行:意外令牌:912703600209 2018-07-06 11:25:05 错误 ErrorCounter:50 - 第 1:74 行:意外令牌:912703600209 第 1:74 行:意外令牌:912703600209 在 org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:646) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2595) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2456) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2420) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2336) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2301) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2011) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.compoundExpr(HqlBaseParser.java:3062) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.inList(HqlBaseParser.java:2884) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2730) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2456) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2420) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2336) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2301) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2011) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1787) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:452) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:707) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:294) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:157) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:267) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:181) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:137) 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:105) 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80) 在 org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168) 在 org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221) 在 org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199) 在 org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778) 在 com.adeptia.dao.MigrationDao.getIndigoUsersBySchemaIds(MigrationDao.java:1096) 在 com.adeptia.dao.MigrationDao.main(MigrationDao.java:1120) 2018-07-06 11:25:05 WARN HqlParser:259 - HHH000203: processEqualityExpression() : 没有要处理的表达式! 2018-07-06 11:25:05 错误 ErrorCounter:54 - 第 1:109 行:意外令牌:94700103 2018-07-06 11:25:05 错误 ErrorCounter:50 - 第 1:109 行:意外令牌:94700103 第 1:109 行:意外令牌:94700103 在 org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:646) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2595) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2456) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2420) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2336) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2301) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2011) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.compoundExpr(HqlBaseParser.java:3069) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.inList(HqlBaseParser.java:2884) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2730) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2456) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2420) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2336) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2301) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2011) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1787) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:452) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:707) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:294) 在 org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:157) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:267) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:181) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:137) 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:105) 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80) 在 org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168) 在 org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221) 在 org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199) 在 org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778) 在 com.adeptia.dao.MigrationDao.getIndigoUsersBySchemaIds(MigrationDao.java:1096) 在 com.adeptia.dao.MigrationDao.main(MigrationDao.java:1120) 2018-07-06 11:25:05 WARN HqlParser:259 - HHH000203: processEqualityExpression() : 没有要处理的表达式!

【问题讨论】:

  • 什么类型的AU_ID
  • 它是一个 30 位的 varchar id
  • 尝试使用String q="select AU_USER from AU_TABLE where AU_ID in('010012025160151756912703600209', '010012025160150254316794700103')";注意单引号

标签: java sql hibernate hql


【解决方案1】:

如果您正在执行这样的 sql 查询:

String q="select AU_USER from AU_TABLE where AU_ID in(010012025160151756912703600209,010012025160150254316794700103)";

然后试试这个代码:

Query query = session.createQuery(q.toString());

希望您的问题得到解决。如果仍然遇到问题,请再次发布查询。

【讨论】:

  • 你的解决方案和OP的解决方案有什么区别?
  • .toString() 已过时,如果 q 无论如何都是字符串。
【解决方案2】:

使用 createSQLQuery 而不是 createQuery 解决了问题

Query query = session.createSQLQuery(q);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多