Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HQL unexpected AST node: :

Tags:

java

hql

My code is failing to inject the below repository. Based on the stack trace, it seems my HQL syntax is invalid, but I'm not sure what I've done wrong.

@Repository
 public interface JobSetRepository extends JpaRepository<JobSetEntity, Integer> {
    @Modifying
    @Transactional
    @Query("UPDATE JobSetEntity SET workstation = :workstation, workflowProcess = :workstation.workflowProcess WHERE id = :jobSet.id")
    public Boolean updateWorkstation(@Param("jobSet") JobSetEntity jobSet, @Param("workstation") Workstation workstation);

    @Modifying
    @Transactional
    @Query("UPDATE JobSetEntity SET workflowProcess = :workflowProcess, workstation = null WHERE id = :jobSet.id")
    public Boolean updateWorkflowProcess(@Param("jobSet") JobSetEntity jobSet, @Param("workflowProcess") WorkflowProcess workflowProcess);
}

stack trace:

12:57:58,692 ERROR main org.hibernate.hql.internal.ast.ErrorCounter:54 - <AST>:1:111: unexpected AST node: :
12:57:58,693 ERROR main org.hibernate.hql.internal.ast.ErrorCounter:50 - <AST>:1:111: unexpected AST node: :
<AST>:1:111: unexpected AST node: :
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4680)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:5114)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4575)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1260)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.newValue(HqlSqlBaseWalker.java:1211)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.assignment(HqlSqlBaseWalker.java:1033)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.setClause(HqlSqlBaseWalker.java:747)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.updateStatement(HqlSqlBaseWalker.java:367)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:255)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)

Update: I'm also getting this error with this query:

@Query("UPDATE OrderEntity SET inProduction = :order.inProduction WHERE OrderEntity.id = :order.id")
void updateInProduction(@Param("order") OrderEntity order);

I updated my versions to the latest:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.5.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.2.5.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.3.4.RELEASE</version>
    </dependency>

Update: I'm also getting this error with:

@Query("SELECT oe FROM OrderEntity oe WHERE oe.id = :orderProductEntity.id")
OrderEntity findBy(@Param("orderProductEntity") OrderProductEntity orderProductEntity);
like image 506
Webnet Avatar asked Sep 23 '13 17:09

Webnet


3 Answers

Sadly, you cannot do :order.inProduction (or :foo.bar in general). Reference.

like image 54
Pace Avatar answered Nov 01 '22 09:11

Pace


When you use this:

:workstation.workflowProcess

You're defining a parameter, so you can't use that notation, but you must use a variable as:

:workstation
:workflowProcess

and so on

like image 6
Joe Taras Avatar answered Nov 01 '22 10:11

Joe Taras


Actually error is in NamedQuery Syntax ,You cannot do like
workflowProcess = :workstation.workflowProcess
instead it should be like
workflowProcess = :workflowProcess

like image 1
Taimur Avatar answered Nov 01 '22 10:11

Taimur