具有两个实体Instrument
和Definition
。
instrumentCode
更改后,Envers仅为Instrument
创建审核记录。
我希望在instrumentCode
更改后,Envers为Instrument
和Definition
实体创建审核记录。怎么可能,有可能吗?
我玩过@ AuditedJoinTable,@ AuditedMappedBy,但是没有运气。
@Audited
@Getter
@Entity
public class Instrument {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "instrument_code")
protected String instrumentCode;
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = Definition.class)
@JoinColumn(name = "definition_id", nullable = false)
private Definition definition;
}
//-----
@Audited
@Getter
@Entity
public class Definition {
@Id
@Column(nullable = false)
protected String id;
@OneToMany(mappedBy = "definition",
orphanRemoval = true,
cascade = CascadeType.ALL,
targetEntity = Instrument.class)
private Set<Instrument> instruments = Sets.newHashSet();
}
答案 0 :(得分:1)
我不知道目前是否有任何可用的现成可用配置(尽管似乎类似is being developed)。
获取历史记录以使数据库中的审核记录完全规范化时,可能可以通过audit queries手动将两者的修订合并在一起。
或者您可以在父实体中引入一个虚拟列,并在子项更改时对其进行更新,如this answer所示:
@Entity
public class A {
private Date lastModified;
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
private List<B> blist;
public void touch() {
lastModified = new Date();
}
}
public class B {
@ManyToOne
private A a;
@PreUpdate
public void ensureParentUpdated() {
if (a != null) {
a.touch();
}
}
}