运行jpql trivial query时收到一个奇怪的异常:
em.getTransaction().begin();
em.createQuery("UPDATE sk_db.Payment p" +" SET p.policyId = ?1 WHERE p.policyId = ?2")
.setParameter(1, id).setParameter(2, 0)
.executeUpdate();
em.getTransaction().commit();
我的架构:
create table if not exists SK_DB.Payment
(
policyId bigserial REFERENCES SK_DB.Policy(id),
bsoNumber varchar null,
....
PRIMARY KEY(policyId)
);
如果我在update或select语句中使用其他字段并不重要,我会收到这样的异常:
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.4.v20160829-
44060b6): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling
[UPDATE sk_db.Payment p SET p.policyId = ?1 WHERE p.policyId = ?2].
[27, 37] The state field cannot be resolved.
[49, 59] The state field path 'p.policyId' cannot be resolved to a valid type.
解决方案:
正如@Neil Stockton所提到的,我在查询中使用了一个模式名称,这在jpql中是不正确的语法。在jpql查询中仅使用实体的名称和字段。