2013-09-23 2 views
11

Мой код не в состоянии внедрить нижележащий репозиторий. На основе трассировки стека кажется, что мой синтаксис HQL недействителен, но я не уверен, что я сделал неправильно.HQL неожиданный узел АСТ::

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

трассировка стеки:

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: Я также получаю эту ошибку с этим запросом:

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

Я обновил свою версию до последнего:

<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: Я также получаю эту ошибку с:

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

ответ

12

К сожалению, вы не можете сделать :order.inProduction (или :foo.bar в целом). Reference.

6

При использовании этого:

:workstation.workflowProcess 

Вы определения параметров, так что вы не можете использовать эту запись, но вы должны использовать переменную как:

:workstation 
:workflowProcess 

и так далее

1

На самом деле ошибка в синтаксисе NamedQuery, вы не можете делать как
workflowProcess =: workstation.workflowProcess
вместо этого должно быть как
workflowProcess =: workflowProcess

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