首页 > 解决方案 > 在事务结束时执行复杂的逻辑

问题描述

我有一个具有丰富 (JPA) 实体的 JEE 应用程序(使用 EclipseLink,如果有区别的话)。我的实体有多种修改其字段的方法。其中一些更改需要复杂且耗时的验证过程,这可能会更新和删除多个相关实体,并且可能需要多次远程服务调用。现在我的实体的用户可能会连续调用多个修改方法,所以我想优化这个过程,以便在事务结束时只调用一次这个验证过程,而不是为每个相关的方法调用立即调用它。另外,我希望调用者看不到它,这样他们就不必知道这个功能,并且一旦完成就需要手动调用验证。

所以我想做的是在实体类的瞬态字段中收集有关实体哪些部分发生变化的信息,并以某种方式在最晚可能的时间自动触发验证过程。我使用了@PreUpdate 和@PrePersist 方法,但它们在每次刷新期间都会被调用,而不仅仅是在事务结束时。我尝试了 PreDestroy,但这显然为时已晚,服务调用仍无法正常工作。我还尝试使用 during=BEFORE_COMPLETION 的 CDI 事件,但是当验证逻辑尝试实现某些相关实体时,这会导致 InjectionFailedExceptions,因此显然我的注入上下文在该状态下不可用。

是否有任何其他工具或技术可以实现这一目标?或者也许上述选项之一应该有效,而我做错了什么?

标签: javajpajakarta-eeeclipselink

解决方案


推荐阅读