我正在从 Hibernate 3.6.10 迁移到 4.2.3。
如果涉及到在实体上使用 OPTIMISTIC_FORCE_INCREMENT 锁,我注意到这两个版本之间的行为差异。
假设我有一个版本 = 0 的现有实体。如果我然后执行以下操作:
- 通过 EntityManager (version=0) 加载实体
- 在实体上应用 OPTIMISTIC_FORCE_INCREMENT 锁
- 通过属性的设置器修改实体
- 刷新实体管理器。这导致版本增量 => version=1
- 提交事务。对于 3.6.10,版本不递增 (version=1)。对于版本 4.2.3,版本递增(版本 = 2)
由于我使用 DTO 将对象传回给客户端,因此 4.2.3 的这种行为对我来说是一个大问题。从实体到 dto 的转换在刷新和提交之间完成(步骤 4 和 5)。使用 4.2.3 这将导致客户端看到该版本的过时版本,这是非常不可取的。
我能做些什么来调整这种行为吗?如果没有,这会是一个错误吗?(它绝对不向后兼容)。
我希望如果在刷新和提交之间没有对实体进行修改,那么在提交时不会有进一步的数据库更新,还是我错了?
感谢所有帮助!提前致谢, 亲切的问候, Franck de Bruijn