我现在已经尝试解决这个问题6个小时了,我不能为我的生活做好准备。
我正在使用:
我正在尝试通过jpql执行一个非常简单的更新查询。查询基本上是:
UPDATE MyClass x SET x.recordStatus='0' where x.token='1234'
我的代码如下所示:
String updateClause = "UPDATE MyClass x SET x.recordStatus='0' where x.token='1234'";
EntityManager entityManager = getDefaultEntityManager();
Query query = entityManager.createQuery(updateClause);
query.executeUpdate();
entityManager.close();
我遇到的问题是驱动程序抛出错误
Caused by: org.postgresql.util.PSQLException: ERROR: column "a0" of relation "my_class" does not exist
Position: 42
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
这是正常情况,因为postgres接受以下形式的更新:
update some_table x set field=value where field2=another_value
......但不是
update some_table x set x.field=value where x.field2=another_value
(即执行更新时SET或WHERE子句中没有别名)
我试过编写我的jpql查询:
没有在SET和WHERE子句中使用别名(更新MyClass x set recordStatus ='0',其中token ='1234'),但是日志显示datanucleus将查询编译为使用别名的本机查询
根本没有使用别名(甚至没有使用类名),但在这种情况下,datanucleus会抛出一个我必须有别名的错误。
有关依赖项的完整列表,请参阅本文末尾。
我的问题是:
感谢您的时间。 亲切的问候, 安德烈
我的依赖项列表:
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_2.0_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-rdbms</artifactId>
<version>3.2.0-release</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jpa</artifactId>
<version>3.2.0-release</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-connectionpool</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>javax.jdo</groupId>
<artifactId>jdo2-api</artifactId>
<version>2.2</version>
</dependency>