Hibernate Envers - 显示修订之间的差异

bon*_*ade 5 tree hibernate compare hibernate-envers difference

跟进这三个主题:

  1. 使用 Hibernate Envers 在两个修订版之间获取旧值和新值
  2. 休眠环境修订的差异
  3. Hibernate Envers:如何检查字段在两次修订之间是否发生了变化?

我正在寻找一种解决方案来比较和显示两个实体修订版之间的差异(添加/编辑/删除的内容)。

假设我有如下实体:

@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 ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我将 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());
Run Code Online (Sandbox Code Playgroud)

但是,我不知道比较对象mainEntityStartmainEntityEnd.

我考虑过将 Java 对象转换为 JSON 对象(或任何其他类型的树结构),但我不确定这是否是一种好方法。

  1. 您知道 Hibernate Envers 是否提供 API 来显示对象之间的差异?
  2. 您知道什么是查看差异的最佳方法吗?

谢谢你的帮助。

Nar*_*ros 1

从功能角度来看,您所询问的内容可能已包含在HHH-8058问题中。

我强烈建议您和其他人随意投票,提供任何关于您希望如何设计最适合您的用例的 API 的意见,等等。