PrePersistHook 提供了这种方法
Optional<ItemModel> execute(ItemModel item);
在实现 PrePersistHook 时,更改的模型将传递给该方法。执行路径已经打开了一个事务,并且该项目似乎已经被持久化,但该事务尚未提交。
如果我尝试通过灵活的搜索再次从数据库中获取相同的项目,它会返回已经更新的对象。
文档 => https://help.sap.com/viewer/bad9b0b66bac476f8a4a5c4a08e4ab6b/v2005/en-US/028a2af06880407cb4b1c0624693dadd.html 定义不应打开事务或创建新线程。
但是如果不允许,如何在 PrePersistHook 中获取旧版本的 Model 来执行验证或在更改持久之前执行其他检查?
在我们的例子中,我们想要创建 OrderModel 的新版本,但持久化的旧版本已经具有旧值。我们认为没有机会以干净的方式获得旧版本。
许多标准的 prepersist 挂钩总是从数据库中再次获取项目并在挂钩中返回 Option.empty()
最好的问候,迈克尔。