【发布时间】:2016-08-11 10:07:19
【问题描述】:
跟进这三个主题:
- Getting the old value and new value between two revisions with Hibernate Envers
- Diff on hibernate envers revisions
- Hibernate Envers : How to check if a field has changed between two revisions?
我正在寻找一种解决方案来比较和显示两个实体修订版之间的差异(添加/编辑/删除的内容)。
假设我有如下实体:
@Entity
@Table(name = "MAIN_ENTITY")
@Audited
public class MainEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "SHORT_NAME")
private String shortName;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "MAIN_ENTITY_COUNTER_ID")
private MainEntityCounter mainEntityCounter;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "mainEntity", fetch = FetchType.LAZY, orphanRemoval = true)
@JsonManagedReference
@OrderBy
private Set<Tag> tags = new HashSet<Tag>();
// getters and setters ...
}
如您所见,我将 MainEntity(也包括 MainEntityCounter 和 Tag)添加到审计表中,因此我正在跟踪这些对象的历史记录。 我发现了如何从数据库中获取特定版本的对象状态:
AuditReader reader = AuditReaderFactory.get(em);
MainEntity mainEntityStart = reader.find(MainEntity.class, mainEntityId, startRevision.intValue());
MainEntity mainEntityEnd = reader.find(MainEntity.class, mainEntityId, endRevision.intValue());
但是我不知道比较对象mainEntityStart 和mainEntityEnd 的最佳解决方案/方法是什么。
我考虑过将 Java 对象转换为 JSON 对象(或任何其他类型的树结构),但我不确定这是否是个好方法。
- 您知道 Hibernate Envers 是否提供 API 来显示对象之间的差异?
- 您知道查看差异的最佳方法是什么吗?
感谢您的帮助。
【问题讨论】:
标签: hibernate tree compare difference hibernate-envers