私のコードは、以下のリポジトリを挿入できません。スタックトレースに基づいて、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)
pdate:このクエリでもこのエラーが発生します。
@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>
pdate:このエラーも発生しています:
@Query("SELECT oe FROM OrderEntity oe WHERE oe.id = :orderProductEntity.id")
OrderEntity findBy(@Param("orderProductEntity") OrderProductEntity orderProductEntity);
残念ながらできません:order.inProduction
(または:foo.bar
一般に)。 参考 。
これを使用する場合:
:workstation.workflowProcess
パラメーターを定義しているため、その表記法は使用できませんが、変数は次のように使用する必要があります。
:workstation
:workflowProcess
等々
実際にはNamedQuery構文にエラーがあります。
workflowProcess =:workstation.workflowProcess
代わりに
workflowProcess =:workflowProcess