使用 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 返回的实例只会填充 id
和 data2
字段。 data1
的值将为空,因为该字段未指定由 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 返回的实例只会填充 id
和 data2
字段。 data1
的值将为空,因为该字段未指定由 Envers 审计。
如果您期望一个完全填充的实体,那么是的,您需要考虑以某种方式将现有状态与审计状态合并。