gpt4 book ai didi

java - Spring Data JPA 乐观锁定与旧版 DB2/400

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

我正在编写新代码来更新旧版 AS400/iSeries/IBMi DB (DB2/400)。我不能改变 table 。据我了解,Spring Data JPA 可以通过 @Version 注释使用乐观锁定,但这需要表中的现有字段进行注释。

DB2/400 已有一项功能,每次更新记录时都会递增,例如:

select row change token for mylib.table1 from mylib.table1 where someid=123

我正在使用(来 self 的 application.properties 文件):

spring.datasource.driver-class-name=com.ibm.as400.access.AS400JDBCDriver
spring.jpa.database-platform = org.hibernate.dialect.DB2400Dialect

我真正想要的是有一种使用“选择行更改 token ”功能作为版本的方法。欢迎任何想法。

提前致谢。

最佳答案

经过大量研究后,我认为答案是不可能。

“行更改 token ”功能非常有趣,但(据我所知)没有帮助。对于 DB2/400 来说,至少如果一条记录被更改,“行更改标记”确实会增加 1。然而,其他几条记录也会同时增加 1。如果列出按“行更改标记”降序排列的所有记录,则可以看到这一点。最初,所有“行更改标记”可能为 0,更新一条记录并再次列出,一堆记录的“行更改标记”将为 1。此外,似乎“行更改标记”可能在 IPL 时被重置或其他机器类型事件。

这似乎是因为记录保存在页面内部,并且“行更改 token ”实际上应该是“页面更改 token ”。因此,虽然这看起来可行,但如果另一个用户在同一页面中更新了另一条记录,那么代码可能会认为记录已更改,而实际上并未更改,而只是相邻记录。

我已经使用老式方法基本上解决了这个问题。我不确定它是否有名字,但我将其称为“相当乐观锁定”。如果我需要更新记录中的某些字段,那么我首先保存旧值,然后在更新的“where”子句中使用旧值,这样如果有任何更改,更新就会失败。它可能意味着更新语句上有很多参数,但它有效。

关于java - Spring Data JPA 乐观锁定与旧版 DB2/400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58309164/

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