解决EclipseLink @Version时间戳字段与DB2之间的冲突的最佳方法

时间:2019-06-11 10:38:36

标签: java db2 eclipselink

在我正在从事的当前项目中,我们使用 EclipseLink作为JPA提供程序。在后台是 DB2-数据库
我们想使用时间戳字段 仅使用限制引入“乐观锁定” 。此外,这些时间戳字段是CURRENT TIMESTAMP字段,因此在更新实体时,CURRENT TIMESTAMP字段会更新值本身。这对于保证整个系统的可靠性是必要的。

用@Version注释实体的属性时,出现以下错误消息:

内部异常:com.ibm.websphere.ce.cm.StaleConnectionException:不支持SQL语句。 SQLCODE = -142,SQLSTATE = 42612,DRIVER = 4.22.29
错误代码:-142
致电:VALUES CURRENT TIMESTAMP
查询:ValueReadQuery(sql =“ VALUES CURRENT TIMESTAMP”)                 在
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl $ 1.handleException(EntityManagerSetupImpl.java:767)                 在
org.eclipse.persistence.transaction.AbstractSynchronizationListener.handleException(AbstractSynchronizationListener.java:275)                 […]


注意:使用提到的注释时,我只会收到此错误消息。  

我的研究结果如下:

  1. 内部异常:com.ibm.websphere.ce.cm.StaleConnectionException: -> StaleConnectionException是当JDBC驱动程序从连接请求或操作返回致命错误时,由WebSphere Application Server数据库连接代码生成的异常。在WebSphere Application Server中,当数据库供应商发出异常指示当前连接池中的连接不再有效时,将发出StaleConnectionException。 (https://developer.ibm.com/answers/questions/205910/how-to-resolve-the-staleconnectionexception-in-web/
  2. 不支持SQL语句。 SQLCODE = -142, ->检测到数据库不支持的SQL语句。该语句可能对其他IBM®关系数据库产品有效,或者在其他上下文中可能有效。例如,语句(例如VALUES )和SIGNAL或RESIGNAL SQLSTATE只能在某些上下文中使用,例如在触发器主体或SQL过程中。 (https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/codes/src/tpc/n142.html
  3. SQLSTATE = 42612,
    ->似乎是内部的,与我的相关性无关

在深入探讨该主题之后,我遇到了以下链接,该链接似乎是迄今为止最令人鼓舞的:
https://www.idug.org/p/fo/et/thread=36380
总之,建议的方法是扩展org.eclipse.persistence.platform.database.DB2MainframePlatform并操纵生成的SQL语句。

我的期望是,应该有更好的方法,因为这应该是框架的标准案例。如果不是,是否有更合适/更好的方法来解决此问题?

0 个答案:

没有答案