我使用以下内容获取实体的修订:
AuditReaderFactory.get(entityManager())
.createQuery()
.forRevisionsOfEntity(Car.class, true, true)
.add(AuditEntity.id().eq(carId))
.addOrder(AuditEntity.revisionNumber().asc())
.getResultList()
但是,未标记为@Audited的字段为空时,它们应具有值。
如果我想要一个完全填充的实体,我是否必须手动合并未经审计的值?
答案 0 :(得分:1)
Hibernate Envers仅使用审计历史记录表中的数据填充实例。唯一的例外是当一个关联未被审计时,意味着要从主表中提取相关实体。
因此,如果您有以下实体定义:
@Entity
public class SimpleEntity {
@Id
@GeneratedValue
private Integer id;
private String data1;
@Audited
private String data2;
...
}
Envers返回的实例只会填充id
和data2
字段。 data1
的值将为null,因为未指定该字段由Envers审核。
如果您期望一个完全填充的实体,那么是的,您需要考虑以某种方式将现有状态与审计状态合并。