繁体   English   中英

如果导致审计表更新过多,如何不更新通过 JPA 中的 @ManyToOne 实体链接?

[英]How not to update linked through @ManyToOne entity in JPA if it causes too much updates in audit tables?

我们有 2 个@Entity具有这样的字段:

@Data
@NoArgsConstructor
@Entity
@Audited
@AuditTable(schema = "audit", value = "tariff_option")
@AuditOverride(forClass = BaseEntity.class, isAudited = true)
@Table(name = "tariff_option")
@EqualsAndHashCode(of = {}, callSuper = true)
@ToString()
public class TariffOption extends BaseEntity {
    private static final long serialVersionUID = -6398231779406280786L;

    ...
    @ManyToOne
    @JoinColumn(name = "dict_tariff_id", updatable = false)
    private DictTariff tariff;
}

@Data
@NoArgsConstructor
@Entity
@Audited
@AuditTable(schema = "audit", value = "dict_tariff")
@AuditOverride(forClass = BaseEntity.class, isAudited = true)
@Table(name = "dict_tariff")
@EqualsAndHashCode(of = {}, callSuper = true)
@ToString(exclude = {"contractorTypes", "service", "tariffOptions", "dictTariffOptions"})
@JsonIgnoreProperties(value = {"contractorTypes", "service", "tariffOptions", "dictTariffOptions"})
public class DictTariff extends BaseEntity {
    private static final long serialVersionUID = -3881580795280130829L;
    ...
    @OneToMany(mappedBy = "tariff", fetch = FetchType.LAZY)
    private List<TariffOption> tariffOptions;
}

然后当我们保存TariffOption类的dictTariffOption变量时,由于@ManyToOne注释和dictTariffOption对领带的所有权,关联的dictTariff类的DictTariff被保存:

repository.save(dictTariffOption)

这会导致问题,即在dictTariff dictTariffOption再次使用相同的值保存。 这导致审计方案中的新条目是我们想要避免的。

我在保存dictTariffOption之前尝试了EntityManager.detach(dictTariff) ,但它没有帮助。 那么忽略链接实体更新的方法是什么? 我还尝试在保存之前重新退休它以使其不被 JPA 污染,但它没有帮助并且它得到了更新。

jpa:
    generate-ddl: false
    hibernate:
      ddl-auto: validate
    properties:
      hibernate:
        dialect: rf.dom.billing.model.common.postgres.CustomPostgreSqlDialect
        enable_lazy_load_no_trans: true
      org:
        hibernate:
          envers:
            default_schema: audit

根据克里斯,

public class DictTariff extends BaseEntity {
@OneToMany(mappedBy = "tariff", fetch = FetchType.LAZY)
@NotAudited
private List<TariffOption> tariffOptions;

TariffOption引用DictTariff被保存时,帮助并且不再更新DictTariff上的审计更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM