获取Hibernate envers的完整实体

时间:2017-03-17 00:21:46

标签: java hibernate jpa hibernate-envers

我使用以下内容获取实体的修订:

AuditReaderFactory.get(entityManager())
            .createQuery()
            .forRevisionsOfEntity(Car.class, true, true)
            .add(AuditEntity.id().eq(carId))
            .addOrder(AuditEntity.revisionNumber().asc())
            .getResultList()

但是,未标记为@Audited的字段为空时,它们应具有值。

如果我想要一个完全填充的实体,我是否必须手动合并未经审计的值?

1 个答案:

答案 0 :(得分:1)

Hibernate Envers仅使用审计历史记录表中的数据填充实例。唯一的例外是当一个关联未被审计时,意味着要从主表中提取相关实体。

因此,如果您有以下实体定义:

@Entity
public class SimpleEntity {
  @Id
  @GeneratedValue
  private Integer id;
  private String data1;
  @Audited
  private String data2;
  ...
}

Envers返回的实例只会填充iddata2字段。 data1的值将为null,因为未指定该字段由Envers审核。

如果您期望一个完全填充的实体,那么是的,您需要考虑以某种方式将现有状态与审计状态合并。