嗨,我需要对以下JPQL进行更新。
UPDATE AreaCoberturaSedes a SET a.seleccionado = acs.seleccionado
FROM AreaCoberturaSedes acs JOIN acs.sedesNegociacion sn
WHERE acs.municipio.id = a.municipio.id
AND sn.negociacion.id = :negociacionId AND sn.id = :sedeNegociacionId
本机查询将是
UPDATE contratacion.area_cobertura_sedes a SET seleccionado = acs.seleccionado
FROM contratacion.area_cobertura_sedes acs INNER JOIN contratacion.sedes_negociacion sn ON sn.id = acs.sede_negociacion_id
WHERE acs.municipio_id = a.municipio_id
AND sn.negociacion_id = 34 AND sn.id = 67
并且工作正常。
但是,使用JPA会引发以下异常:
ERROR [org.hibernate.hql.internal.ast.ErrorCounter] (default task-47) line 1:123: unexpected token: FROM: line 1:123: unexpected token: FROM
at org.hibernate.hql.internal.antlr.HqlBaseParser.updateStatement(HqlBaseParser.java:261) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:169) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.jboss.as.jpa.container.AbstractEntityManager.createQuery(AbstractEntityManager.java:443) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
最佳答案
请通过此链接刷新对JPQL UPDATE查询的了解。没有FROM。
UPDATE [<candidate-class>] SET item1=value1, item2=value2
[WHERE <filter>]
有关更多信息,请参见this post。