Hibernate Envers获得了标准的修订版

时间:2014-08-28 06:35:42

标签: 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();
  1. 这会为每个更改的InventoryItem返回一个元素。因此,如果在修订版中更改了两个InventoryItem,我会得到两个元素 - 我不希望这样。
  2. 这也会返回实际的InventoryItem,我认为这有点重 - 我不希望这样。
  3. 如何获得不同的修订集(日期,修订号)?

2 个答案:

答案 0 :(得分:1)

根据Adam的回答,这是我实施的代码。我将他的答案标记为已接受的答案。

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

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

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

答案 1 :(得分:0)

我认为您要找的是addProjection上的AuditQuery方法。您可以在修订号和日期上添加投影。