提问者:小点点

Hibernate Envers-显示版本之间的差异


就这三个主题采取后续行动:

  1. 使用Hibernate Envers获取两个版本之间的旧值和新值
  2. hibernate上的差异意味着修订
  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 ...
}

就像您可以看到的,我将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());

但是,我不知道比较对象main EntityStartmain EntityEnd的最佳解决方案/方法是什么。

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

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

谢谢你的帮助。


共1个答案

匿名用户

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

我强烈建议你和其他人自由投票,就你希望如何看到最适合你用例的API设计提供任何意见,等等。