【问题标题】:hql - Getting error that unexpected tokenhql - 收到意外令牌的错误
【发布时间】:2014-10-12 09:27:39
【问题描述】:

我正在使用 Hibernate,我有这个查询:

List list = session.createQuery(" From as Project project where project.properties.pr_id = '4711' ").list();

还有这个项目的 hbm 文件:

<hibernate-mapping auto-import="true">
  <class dynamic-insert="true" dynamic-update="true" entity-name="Project" name="de.planta.server.hibernate.pojo.DynamicPojo" table="DT461">
  <dynamic-component name="properties">
   <property column="`DI041544`" default="0" name="miscel_pay_oblig" type="de.planta.server.hibernate.types.DefaultValueDoubleType" /> 
   <property column="`DI051881`" length="10" name="report_pls_report_id" type="de.planta.server.hibernate.types.DefaultValueStringType" /> 
   <property column="`DI059017`" length="8" name="active_process_phase" type="de.planta.server.hibernate.types.DefaultValueStringType" /> 
   <property column="`DI001001`" length="18" name="pr_id" type="de.planta.server.hibernate.types.DefaultValueStringType" />
         ...  

还有这个错误信息,但是为什么???

14:51:44.157 ERROR  session=33 o.h.hql.internal.ast.ErrorCounter - line 1:23: unexpected token: p
14:51:44.158 ERROR  session=33 o.h.hql.internal.ast.ErrorCounter - line 1:23: unexpected token: p
antlr.NoViableAltException: unexpected token: p
        at org.hibernate.hql.internal.antlr.HqlBaseParser.atom(HqlBaseParser.java:3716) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3376) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3248) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2954) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:590) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2721) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2582) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2546) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2462) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2427) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2137) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1913) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:474) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:729) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:316) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:179) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at de.planta.server.hibernate.PlantaSession.getHQLQueryPlan(PlantaSession.java:180) [PlantaServer.jar:na]
        at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) [hibernate-core-4.3.4.Final.jar:4.3.4.Final]
        at de.planta.server.hibernate.PlantaSession.createQuery(PlantaSession.java:172) [PlantaServer.jar:na]
        at de.planta.server.hibernate.SessionHandler.createQuery(SessionHandler.java:177) [PlantaServer.jar:na]
        at de.planta.server.hibernate.NativeHQLEnversInterface.hqlQuery(NativeHQLEnversInterface.java:71) [PlantaServer.jar:na]
        at de.planta.server.hibernate.NativeHQLEnversInterface.hqlQuery(NativeHQLEnversInterface.java:103) [PlantaServer.jar:na]
        at de.planta.server.NativeInterface.startThread(Native Method) [PlantaServer.jar:na]
        at de.planta.server.threads.PlantaServerThread.run(PlantaServerThread.java:146) [PlantaServer.jar:na]
Exception in thread "PlantaSession" org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: p near line 1, column 23 [ From Project p where p.properties.pr_id = '4711' ]
        at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
        at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)
        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.<init>(HQLQueryPlan.java:126)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
        at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
        at de.planta.server.hibernate.PlantaSession.getHQLQueryPlan(PlantaSession.java:180)
        at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
        at de.planta.server.hibernate.PlantaSession.createQuery(PlantaSession.java:172)
        at de.planta.server.hibernate.SessionHandler.createQuery(SessionHandler.java:177)
        at de.planta.server.hibernate.NativeHQLEnversInterface.hqlQuery(NativeHQLEnversInterface.java:71)
        at de.planta.server.hibernate.NativeHQLEnversInterface.hqlQuery(NativeHQLEnversInterface.java:103)
        at de.planta.server.NativeInterface.startThread(Native Method)
        at de.planta.server.threads.PlantaServerThread.run(PlantaServerThread.java:146)

Pojo 类

public class DynamicPojo extends HibernatePojoClass {
    private static final long serialVersionUID = 7906434537945052481L;

    @Id
    @GeneratedValue
    @NotNull
    private UUID id;

    private Map<String,Object> properties = new HashMap<String, Object>();
    private Map<String,Object> formulaProperties = new HashMap<String, Object>();

    @Override
    @Audited
    public UUID getId() {
        return id;
    }

    @Override
    public void setId(UUID id) {
        this.id = id;
    }

    @Override
    @Audited
    public Map<String, Object> getProperties() {
        return properties;
    }

    @Override
    public void setProperties(Map<String, Object> properties) {
        this.properties = properties;
    } 
    ...

【问题讨论】:

  • 这样对吗,第一个查询是From Project项目,而错误是From Project as project?
  • 我编辑文本,对不起
  • 同样的错误 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:p 靠近第 1 行,第 23 列 [来自项目 p,其中 p.properties.pr_id = '4711'
  • @trabzonlu1461 您的项目实体中的“属性”是什么?它是对另一个实体的对象引用吗?请分享您的实体
  • @ManjunathAnand 不是地图,我在问题中添加了 DynamicPojo

标签: java hibernate hql


【解决方案1】:

我修复了错误:

<property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>

但我不知道为什么? 谁能解释一下?

【讨论】:

猜你喜欢
  • 2016-10-05
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2018-09-23
  • 2016-05-02
  • 1970-01-01
相关资源
最近更新 更多