我们有一个需求:使用Hibernate Envers根据差异记录并持久化事务中的实体更改。我们实现了一个RevisionListener
public class MyRevisionListener implements EntityTrackingRevisionListener {
@Override
public void newRevision(Object revision) {
...
}
@Override
public void entityChanged(Class entityClass,
String entityName,
Serializable entityId,
RevisionType revisionType,
Object revisionEntity) {
int revisionId = ((DefaultRevisionEntity) revisionEntity).getId();
List<?> revisions = AuditReaderFactory.get(entityManager)
.createQuery()
.forRevisionsOfEntity(entityClass, false, true)
.add(AuditEntity.id().eq(entityId))
.add(AuditEntity.revisionNumber().le(revisionId + 1))
.addOrder(AuditEntity.revisionNumber().desc())
.setMaxResults(2)
.getResultList();
checkArgument(revisions.size() < 3, "Need at most two revisions: %s", revisions);
checkArgument(revisions.size() > 0, "Need at least one revision: %s", revisions);
// continue with diff calculation;
}
}
问题:
如果我需要提供更多信息,请告诉我。
更新
问题出在Spring Test、上下文和bean管理上(特别是我如何获得EntityManager
)。我接受了@Naros的帖子,因为它回答了第一个问题,并对第二个问题进行了回答:)
https://stackoverflow.com/questions/50684093
复制相似问题