【问题标题】:Hibernate Envers get revisions for criteriaHibernate Envers 获得标准的修订
【发布时间】:2014-08-28 06:35:41
【问题描述】:

使用 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 返回一个元素。因此,如果在修订中更改了两个 InventoryItems,我会得到两个元素——我不希望这样。
  2. 这也返回了实际的InventoryItems,我认为这有点重——我不希望这样。

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

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:

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

    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,对应createdrevisionProperty

    【讨论】:

      【解决方案2】:

      我认为您正在寻找的是 AuditQuery 上的 addProjection 方法。您可以添加对修订号和日期的预测。

      【讨论】:

      • 我认为你是完全正确的。我玩了一点projections,但并没有完全发挥作用。一定是太晚了,太累了,因为有了你的新动力,我很快就开始工作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2011-07-03
      相关资源
      最近更新 更多