Hibernate Envers 获得标准的修订

San*_*gen 1 java hibernate hibernate-envers

使用 Hibernate Envers (4.1.9.Final)。尝试获取实体已更改为特定类型且符合特定标准的所有修订(日期、修订号)。

这是我目前拥有的代码:

    AuditReader auditReader = AuditReaderFactory.get(entityManager);
    AuditQuery query = auditReader.createQuery()
            .forRevisionsOfEntity(InventoryItem.class, false, true)
            .add(AuditEntity.property("section_uuid").eq(sectionUuid))
            .addOrder(AuditEntity.revisionNumber().desc());
    List<Object[]> revisions = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
  1. 这将为每个更改返回一个元素InventoryItem。因此,如果InventoryItem在修订版中更改了两个s,我会得到两个元素——我不想要那样。
  2. 这也会返回实际的InventoryItems,我认为这有点沉重——我不想要那样。

如何获得不同的修订集合(日期、修订号)?

San*_*gen 6

根据亚当的回答,这是我实现的代码。我会将他的答案标记为已接受的答案。

AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQuery query = auditReader.createQuery()
    .forRevisionsOfEntity(InventoryItem.class, false, true)
    .addProjection(AuditEntity.revisionNumber().distinct())
    .addProjection(AuditEntity.revisionProperty("created"))
    .add(AuditEntity.property("section_uuid").eq(sectionUuid))
    .addOrder(AuditEntity.revisionNumber().desc());
Run Code Online (Sandbox Code Playgroud)

因此,query.getResultList()将返回 的集合Object[],其中每个Object[]包含:

  • Object[0]: 修订号为 int
  • Object[1]: 修订日期为java.util.Date,对应created revisionProperty