首页 > 解决方案 > 使用 hibernate/JPA 删除事务中更新的选定实体

问题描述

我的要求是-基于属性文件中标志的值(例如skipDbUpdate),我想保存/更新实体或在正在进行的事务中跳过这些实体。我已经在实体上实现了一个侦听器,如果此标志为真,它将引发异常,但现在我必须增强此行为以不引发错误但跳过实体的更新。我尝试了以下选项:

  1. 实体上的@Immmutable 注释 - 我无法基于此标志,应用程序使用spring,但我无法将@ConditionalOnProperty 注释与@Entity 和@Immutatble 注释结合使用。

@Entity @Immutatble public class EntityA {}

  1. 在 @Column 注释内实体的每个字段上使用 updateable=false, insertable=false - 同样,我无法基于此标志(原因与上述相同)。

    @Column(insertable = false, updatable = false)

  2. 当标志为真时,在侦听器中调用 entityManager.detach(o) 方法,如这个问题中所建议的 -如何使实体成为只读? 但这是试图从其他事务中保存实体并抛出错误 - “ java.lang.RuntimeException: org.hibernate.HibernateException: Found two representations of same collection:

由于这是仅使用 spring 的旧代码库,我不能那么容易地使用注释。

请建议哪种方法是满足此要求的最佳方法?

谢谢

标签: javahibernatespring-mvcjpatransactions

解决方案


假设您正在使用 CRUDRepository,您可以扩展接口并覆盖 save 方法,并且在此方法中,您可以检查 foe 标志,如果 skipDb 然后什么也不做,调用 super.save(….)


推荐阅读