OpenJPA语法错误:遇到“优化”

时间:2016-03-14 10:47:50

标签: java jpa optimization websphere openjpa

使用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增加了“优化1行”部分,因为它认为它正在处理DB2?怎么可能这样呢?有什么方法可以明确关闭此功能吗?

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

2 个答案:

答案 0 :(得分:1)

  

显然,OpenJPA增加了“优化1行”部分,因为它认为它正在处理DB2?怎么可能这样呢?有什么方法可以明确地关闭这个功能吗?

根据提供的信息,我不确定为什么就是这种情况。

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

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

答案 1 :(得分:0)

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