当前位置: 首页 > 知识库问答 >
问题:

带有Oracle抛出奇数错误的JPQL更新查询。我该怎么修好它?

法浩壤
2023-03-14

我在运行一些JPQL查询时遇到了一些问题。在我的域模型中,我有一个City类,它有一个名称和一个对Country对象的引用,而Country对象也有一个名称。我正在尝试运行此查询:

Query q = em.createQuery("UPDATE City city SET city.name = 'Americaville' WHERE city.country.name = 'America'");
q.executeUpdate();

然而,我得到了这个例外:

 java.sql.SQLSyntaxErrorException: ORA-00971: missing SET keyword

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3665)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1352)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)

谢谢!

共有1个答案

杜俊逸
2023-03-14

结果表明,JPQL不允许在其update子句中加入联接。解决方法是在where子句中使用子查询来选择要更新的正确行。

 类似资料:
  • 我有一个包含各种表和东西的数据库,我使用一个相当大的SQL查询,它从所有表中收集值并对其进行排序,以便我可以轻松地将结果导出为CSV。 我创建了一个存储过程,通过Java触发查询。为此,我决定使用表的存储库,它只存储上次点击按钮的用户的名称,即该操作的时间戳,因为我想避免创建一个新实体。 当我手动执行查询时,我得到了155行的正确结果。但当我点击按钮时,它会抛出一个错误: 155很好。我做错了什么

  • 我试图实现连接,但我面临错误。我有产品表和商店表。产品表引用通过外键存储表,如下所示: 产品JAVA 现在,我展示tore.java 现在,我展示仓库 现在,这个错误是因为我在最后两个查询中实现了join。我想做的是购买所有商店位于特定城市或州的产品,如上图所示。 我遇到的错误是: 启动应用程序上下文时出错。要显示自动配置报告,请在启用调试的情况下重新运行应用程序。2016-10-16 09:53

  • 尝试在Spring Data JPA中做更新查询。在我的测试方法(见下文)中,我正在保存一个学生firstName="Bill"和lastName="Smith"。怎么可能是我正在将"Bill"打印出来到控制台(非常最后一行),鉴于学生Respository.findByFirstName("John")实际上给出了一个列表与一个成员?任何帮助赞赏...

  • 这是我的代码: 这是android文档中给出的默认值。我只是改了网址。 这是我的错误消息: java.lang.StringIndexOutOfBoundsException:长度=28;RegionStart=1;RegionLength=499在java.lang.String.SubString(String.java:1931)在com.example.my.app.MainActivit

  • 我想在Firefox上使用SharedArrayBuffer。因此,我让我的web服务器根据文档在响应头中添加跨Origin-Opener-Policy和跨Origin-Embedder-Policy。 当您以localhost身份访问服务器时,它工作正常,但当您以其IP地址访问服务器时,它就不工作了。我该怎么修好它? 火狐的版本是83.0。 谢了。