使用 Hibernate envers 获取完整的实体

Get full entities with Hibernate envers

我正在使用以下方法获取实体的修订:

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

但是没有用@Audited标记的字段在它们应该有值的时候是空的。

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

Hibernate Envers 仅使用审计历史 table 中的数据填充实例。唯一的例外是当关联未被审计并且暗示相关实体将从主要 table.

中删除时

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

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

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

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