JPA EclipseLink - 普通的更新查询异常

时间:2017-04-10 14:04:52

标签: jpa eclipselink jpql

运行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查询中仅使用实体的名称和字段。

0 个答案:

没有答案