【发布时间】:2020-04-11 19:42:21
【问题描述】:
我对 Hibernate Envers 有疑问。 我有这样的课程:
@Entity
@Table(name = "REVINFO")
@RevisionEntity(MyRevisionEntityListener.class)
public class RevEntity {
@Id
@RevisionNumber
@Column(name = "REV", nullable = false, updatable = false)
private Integer id;
@RevisionTimestamp
@Column(name = "REVTSTMP", nullable = false, updatable = false)
private Date timestamp;
@Column(name = "MODIFIED_BY", length = 100)
private String modifiedBy;
@Column(name = "COMMENT", length = 100)
private String comment;
public class MyRevisionEntityListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
RevEntity a = (RevEntity) revisionEntity;
a.setComment("Some value");
}
}
如何选择实体 ID 及其“REVINFO”对象的每次更改?
我有这样的东西:
List resultList = AuditReaderFactory.get(entityManager)
.createQuery()
.forRevisionsOfEntityWithChanges(ClientType.class, true)
.add(AuditEntity.id().eq(entityId))
.getResultList();
而且它几乎工作得很好。我收到了每一个“变化”,但REVINFO 看起来很奇怪。所有字段均为空 - 还有 1 个对象 $$_hibernate_interceptor 实际上包含“信息”,但我无法通过代码访问它(或者我不知道如何访问它)。请参见图片中的示例。
所以我的问题是:
1 - 我怎样才能得到REVINFO 值?
2 - 我真的必须使用 entityManager,还是可以通过不同的方法来实现?
编辑 2:
如果我错了,请纠正我,但是 forRevisionsOfEntityWithChanges 是否可以作为延迟初始化?我的意思是,如果我尝试接收例如modifiedBy 字段,我实际上会得到我的数据。调试器日志让我很困惑。
【问题讨论】:
标签: java hibernate hibernate-envers