使用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
答案 0 :(得分:1)
显然,OpenJPA增加了“优化1行”部分,因为它认为它正在处理DB2?怎么可能这样呢?有什么方法可以明确地关闭这个功能吗?
根据提供的信息,我不确定为什么就是这种情况。
幸运的是,您可以使用persistence.xml中的以下属性覆盖它:
<property name="openjpa.jdbc.DBDictionary" value="derby"/>
答案 1 :(得分:0)
解决了它。应用程序已配置derby,但它使用的是数据访问服务,而后者又将db2指定为DB字典。 我正在为现有代码提供服务,因此无法立即找到该设置。谢谢你们指点我正确的方向。