java - 使用 hibernate/JPA 删除事务中更新的选定实体
问题描述
我的要求是-基于属性文件中标志的值(例如skipDbUpdate),我想保存/更新实体或在正在进行的事务中跳过这些实体。我已经在实体上实现了一个侦听器,如果此标志为真,它将引发异常,但现在我必须增强此行为以不引发错误但跳过实体的更新。我尝试了以下选项:
- 实体上的@Immmutable 注释 - 我无法基于此标志,应用程序使用spring,但我无法将@ConditionalOnProperty 注释与@Entity 和@Immutatble 注释结合使用。
@Entity @Immutatble public class EntityA {}
在 @Column 注释内实体的每个字段上使用 updateable=false, insertable=false - 同样,我无法基于此标志(原因与上述相同)。
@Column(insertable = false, updatable = false)
当标志为真时,在侦听器中调用 entityManager.detach(o) 方法,如这个问题中所建议的 -如何使实体成为只读? 但这是试图从其他事务中保存实体并抛出错误 - “
java.lang.RuntimeException: org.hibernate.HibernateException: Found two representations of same collection:
”
由于这是仅使用 spring 的旧代码库,我不能那么容易地使用注释。
请建议哪种方法是满足此要求的最佳方法?
谢谢
解决方案
假设您正在使用 CRUDRepository,您可以扩展接口并覆盖 save 方法,并且在此方法中,您可以检查 foe 标志,如果 skipDb 然后什么也不做,调用 super.save(….)
推荐阅读
- arrays - Rust - 如何初始化包含 HashSet 字段的结构数组?
- tensorflow - 向 One Shot Learning 训练模型添加新类
- c# - ASP.NET MVC User.Identity.Name 为空白
- javascript - CSS - 创建响应式顶部导航菜单
- visual-studio-code - vscode problemMatcher 无法识别任务编译器警告
- sql-server - 将 2 个列表框中的所有项目保存到 SQL Server 数据库
- php - PHP反Layer7攻击
- ssh - 创建从 Jump 主机到数据库的 SSH 隧道,并在 Jump 主机端口上访问数据库
- ionic-framework - 为什么离子服务不起作用我得到错误?
- python - 将多个python函数链接在一起