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

时间:2016-08-11 10:07:19

标签: hibernate tree compare difference hibernate-envers

跟进这三个主题:

  1. Getting the old value and new value between two revisions with Hibernate Envers
  2. Diff on hibernate envers revisions
  3. Hibernate Envers : How to check if a field has changed between two revisions?
  4. 我正在寻找一种解决方案来比较和显示两个实体修订版之间的差异(添加/编辑/删除的内容)。

    假设我有以下实体:

    @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());
    

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

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

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

1 个答案:

答案 0 :(得分:1)

从功能角度来看,HHH-8058问题可能涵盖了您所询问的内容。

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