OpenJPA Syntax error: Encountered "optimize"

OpenJPA Syntax error: Encountered "optimize"

当使用 OpenJPA 在内存数据库 org.apache.derby 中执行 select 语句时,我遇到了这个错误:

javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
<openjpa-2.1.2-SNAPSHOT-r422266:1636464 fatal general error> org.apache.openjpa.persistence.PersistenceException: Syntax error: Encountered "optimize" at line 1, column 80. {SELECT t0.VERSION, t0.SOMEOTHER_COLUMN FROM MYTABLE t0 WHERE t0.MYTABLE_CODE = ?  optimize for 1 row} [code=20000, state=42X01] FailedObject: UDA [org.apache.openjpa.util.StringId] [java.lang.String]

OpenJPA 客户端嵌入在 IBM WebSphere 客户端中:com.ibm.ws.jpa.thinclient-8.5.5.5.jar

显然 OpenJPA 添加了 'optimize for 1 row' 部分是因为它认为它正在处理 DB2?这怎么可能?有什么办法可以明确关闭此功能?

我确实找到了一些关于 'optimize for 1 row' 后缀的解释: https://www.ibm.com/developerworks/community/blogs/22586cb0-8817-4d2c-ae74-0ddcc2a409bc/entry/optimize_for_1_row1?lang=en

Apparently OpenJPA adds the 'optimize for 1 row' part because it thinks it is dealing with DB2? How could this be possible? Is there any way I can turn off this feature explicitly?

根据提供的信息,我不确定为什么是这样。

幸运的是,您可以在 persistence.xml 中使用以下 属性 覆盖它:

<property name="openjpa.jdbc.DBDictionary" value="derby"/>

解决了。该应用程序配置了 derby,但它使用的是数据访问服务,而该服务又将 db2 指定为 DB 字典。 我正在为现有代码提供服务,因此无法立即找到该设置。谢谢你们为我指明了正确的方向。