java - 在事务结束时执行复杂的逻辑
问题描述
我有一个具有丰富 (JPA) 实体的 JEE 应用程序(使用 EclipseLink,如果有区别的话)。我的实体有多种修改其字段的方法。其中一些更改需要复杂且耗时的验证过程,这可能会更新和删除多个相关实体,并且可能需要多次远程服务调用。现在我的实体的用户可能会连续调用多个修改方法,所以我想优化这个过程,以便在事务结束时只调用一次这个验证过程,而不是为每个相关的方法调用立即调用它。另外,我希望调用者看不到它,这样他们就不必知道这个功能,并且一旦完成就需要手动调用验证。
所以我想做的是在实体类的瞬态字段中收集有关实体哪些部分发生变化的信息,并以某种方式在最晚可能的时间自动触发验证过程。我使用了@PreUpdate 和@PrePersist 方法,但它们在每次刷新期间都会被调用,而不仅仅是在事务结束时。我尝试了 PreDestroy,但这显然为时已晚,服务调用仍无法正常工作。我还尝试使用 during=BEFORE_COMPLETION 的 CDI 事件,但是当验证逻辑尝试实现某些相关实体时,这会导致 InjectionFailedExceptions,因此显然我的注入上下文在该状态下不可用。
是否有任何其他工具或技术可以实现这一目标?或者也许上述选项之一应该有效,而我做错了什么?
解决方案
推荐阅读
- python - 批准和拒绝来自用户的请求,Django/Python
- maven - IntelliJ IDEA - Kotlin 项目中未加载 Kotlin Maven 依赖项
- javascript - 是否可以制作一个从外部 URL 检索 HTML 元素的 Chrome 扩展程序
- python - 找出在 MongoDb 集合中更新了多少行
- react-native - 从 ImagePicker 中选择时,图像显示速度极慢
- javascript - Javascript Promises catch 块不起作用?
- javascript - 我们应该在前端还是后端构建 Mongoose 查询?
- char - 与“cout”一起使用的自由字符指针函数
- java - java.lang.NoClassDefFoundError: mpi/MPIException
- python - 有没有办法使用我可以窃取并嵌入网站的 javascript / html 制作 firebase 动态链接