将已删除的数据与其他数据一起包含在审核查询中

时间:2017-06-27 10:57:12

标签: java hibernate hibernate-envers

我正在查询

AuditQuery si_query = audQueryCreator.forRevisionsOfEntity(SecurityIdentifiers.class, false, false)
                                .add(AuditEntity.revisionNumber().eq(revision_Id));

以上查询不包含已删除的数据(修订类型为' 2'的数据)。

如果我添加以下代码

si_query.add(AuditEntity.revisionType().eq(RevisionType.DEL));

然后它只获取已删除的数据,这是我不想要的。

我希望删除的数据以及插入的数据和修改后的数据。

此查询会显示除已删除的数据之外的所有其他数据。

所以请告诉我如何查询以包含已删除的数据。

1 个答案:

答案 0 :(得分:1)

问题在于你的用法,特别是最后一个论点,也可能是第二个论点。

为了在结果中返回已删除的行,您必须将该方法的最后一个参数指定为true。该参数的方法java文档说:

  

如果为true,则还将返回删除实体的修订。除id字段外,其他实体将具有修订类型“delete”,并且不包含任何数据(所有字段为null)。

我的下一个问题是您期望的结果对象类型。这与方法的第二个参数有关。该参数的方法java文档说:

  

如果为true,则执行此查询将返回实体列表,而不是三元素数组列表。

所以问题是你是否希望返回的值列表是实际的审计实体实例,或者你是否期望它是List<Object[]>,其中每个对象数组行包含一组特定的值。

通过指定true,结果为List<Object>,但falseList<Object[]>

如果您使用false,则每行将包含:

  1. 实体实例。
  2. 修订实体实例。 (修订号和日期)。
  3. 修订类型(ADD,MOD,DEL)。
  4. HTH。