我们StaleStateException
在代码中主要面临以下错误Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
。
我们在使用 Oracle 12c 数据库时没有看到此错误,但仅在迁移到 PostgreSQL 12.1 后才开始频繁出现。
通过以下文章,我发现:
Oracle 不支持可重复读取- 我想这意味着 Hibernate 将读取的新值将是该时刻 Oracle DB 中的最新提交值,而不是在开始时读取的提交值交易。我对吗?
Postgres 支持可重复读取- 我想这意味着如果我们在事务开始时读取一个值,我们会在那个时刻得到一个提交的值,并且每当我们在同一个事务中执行读取时,我们都会得到相同的值,直到事务已提交,即使在初始读取后向数据库提交了新值。我又是对的吗?
- 我想在提交之后验证期望。不是吗?
所以,我的问题是.. 在这些情况下(postgres、oracle)对 Hibernate 的期望是否不同?即预期的行数与可重复读取的存在/不存在有关吗?
是否有任何其他可能的原因StaleStateException
不会发生在 Oracle 中而仅发生在 PostgreSQL 中?