[英]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.