web-dev-qa-db-fra.com

HQL inattendu AST noeud:

Mon code ne parvient pas à injecter le référentiel ci-dessous. D'après la trace de la pile, il semble que ma syntaxe HQL soit invalide, mais je ne suis pas sûr de ce que j'ai mal fait.

@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);
}

trace de la pile:

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)

Mise à jour: Je reçois également cette erreur avec cette requête:

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

J'ai mis à jour mes versions à la dernière:

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

Mise à jour: Je reçois également cette erreur avec:

@Query("SELECT oe FROM OrderEntity oe WHERE oe.id = :orderProductEntity.id")
OrderEntity findBy(@Param("orderProductEntity") OrderProductEntity orderProductEntity);
11
Webnet

Malheureusement, vous ne pouvez pas faire :order.inProduction (ou :foo.bar en général). Référence .

13
Pace

Quand vous utilisez ceci:

:workstation.workflowProcess

Vous définissez un paramètre, vous ne pouvez donc pas utiliser cette notation, mais vous devez utiliser une variable comme suit:

:workstation
:workflowProcess

etc

6
Joe Taras

En fait, l'erreur est dans la syntaxe NamedQuery, vous ne pouvez pas faire comme 
workflowProcess =: workstation.workflowProcess 
il devrait plutôt être comme 
workflowProcess =: workflowProcess

1
Taimur