首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HQL意外AST节点::

HQL意外AST节点::
EN

Stack Overflow用户
提问于 2013-09-24 01:00:09
回答 4查看 66.2K关注 0票数 13

我的代码无法注入下面的存储库。根据堆栈跟踪,我的HQL语法似乎是无效的,但我不确定我做错了什么。

代码语言:javascript
复制
@Repository
 public interface JobSetRepository extends JpaRepository {
    @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);
}

堆栈跟踪:

代码语言:javascript
复制
12:57:58,692 ERROR main org.hibernate.hql.internal.ast.ErrorCounter:54 - :1:111: unexpected AST node: :
12:57:58,693 ERROR main org.hibernate.hql.internal.ast.ErrorCounter:50 - :1:111: unexpected AST node: :
: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.(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80)

更新:在这个查询中,我也得到了这个错误:

代码语言:javascript
复制
@Query("UPDATE OrderEntity SET inProduction = :order.inProduction WHERE OrderEntity.id = :order.id")
void updateInProduction(@Param("order") OrderEntity order);

我将我的版本更新到了最新版本:

代码语言:javascript
复制
org.hibernate
        hibernate-core
        4.2.5.Final
    
    
        org.hibernate
        hibernate-entitymanager
        4.2.5.Final
    
    
        org.springframework.data
        spring-data-jpa
        1.3.4.RELEASE

更新:我也收到了这个错误:

代码语言:javascript
复制
@Query("SELECT oe FROM OrderEntity oe WHERE oe.id = :orderProductEntity.id")
OrderEntity findBy(@Param("orderProductEntity") OrderProductEntity orderProductEntity);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-25 22:19:58

遗憾的是,您不能这样做:order.inProduction(或:foo.bar通常)。Reference..。

票数 16
EN

Stack Overflow用户

发布于 2013-09-26 20:40:05

当您使用此命令时:

代码语言:js
复制
:workstation.workflowProcess

您正在定义一个参数,因此不能使用该表示法,但必须使用变量,如下所示:

代码语言:javascript
复制
:workstation
:workflowProcess

以此类推

票数 6
EN

Stack Overflow用户

发布于 2015-09-15 15:34:54

实际上错误在NamedQuery语法中,你不能这样做

workflowProcess = :workstation.workflowProcess

相反,它应该像这样

workflowProcess =:工作流流程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18964857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档