Inbound Persistence Hooks =>PrePersistHook:获取旧实例

Inbound Persistence Hooks = >PrePersistHook: Getting old instance

PrePersistHook 提供了这个方法

Optional<ItemModel> execute(ItemModel item);

在实现 PrePersistHook 时,更改的模型将传递给该方法。执行路径已经打开了一个事务,似乎项目已经持久化了,但是事务还没有提交。

如果我尝试通过灵活搜索再次从数据库中获取相同的项目,它 return 是已经更新的对象。

文档 => https://help.sap.com/viewer/bad9b0b66bac476f8a4a5c4a08e4ab6b/v2005/en-US/028a2af06880407cb4b1c0624693dadd.html 定义不应打开事务或创建新线程。

但如果不允许,如何在PrePersistHook中获取旧版本的Model,以便在更改持久化之前执行验证或执行其他检查?

在我们的例子中,我们想要创建一个新版本的 OrderModel,但持久化的旧版本已经拥有旧值。我们认为没有机会以干净的方式获得旧版本。

许多标准的 prepersist 挂钩总是从数据库中再次获取项目并且 return Option.empty() 在挂钩中

此致, 迈克尔.

我找到了适合我的解决方案。我重写了 DefaultModelEntityService 并在数据更新之前读取了数据。