gpt4 book ai didi

oracle - 使用 Oracle 抛出奇怪错误的 JPQL 更新查询。我该如何解决?

转载 作者:行者123 更新时间:2023-12-01 12:30:26 26 4
gpt4 key购买 nike

我在运行某些 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)

这个问题似乎只有当我在 where 子句中添加那个“国家”时才会出现。也就是说,如果我执行“UPDATE City city SET city.name = 'Americaville' WHERE city.name = 'San Francisco'”,则一切正常。

我认为 JPQL 可能不允许深度属性遍历,但是查看 JPQL 规范( http://docs.oracle.com/cd/E12839_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_bulk_ops ),我明白了

single_valued_association_path_expression::= Identification_variable.{single_valued_association_field.}*single_valued_association_field

这不允许我使用深路径吗?这似乎是一个允许我编写 entity.property1.other.more.field 的规则。

谢谢!

最佳答案

事实证明,JPQL 不允许在其更新子句中加入。解决方法是在 where 子句中使用子查询来选择要更新的正确行。

关于oracle - 使用 Oracle 抛出奇怪错误的 JPQL 更新查询。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29754071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com