java - 在 Hibernate Envers 中获取以前版本的实体

标签 java hibernate jboss hibernate-envers

我有一个由 Hibernate 加载的实体(通过 EntityManager):

User u = em.load(User.class, id)

该类(class)由 Hibernate Envers 审核。如何加载以前版本的用户实体?

最佳答案

这是找到相对于“当前”修订号的先前修订的另一个版本,因此即使您正在查看的实体不是最新修订也可以使用它。它还处理没有先前修订的情况。 (em 被假定为先前填充的 EntityManager)

public static User getPreviousVersion(User user, int current_rev) {
    AuditReader reader = AuditReaderFactory.get(em);

    Number prior_revision = (Number) reader.createQuery()
    .forRevisionsOfEntity(User.class, false, true)
    .addProjection(AuditEntity.revisionNumber().max())
    .add(AuditEntity.id().eq(user.getId()))
    .add(AuditEntity.revisionNumber().lt(current_rev))
    .getSingleResult();

    if (prior_revision != null)
        return (User) reader.find(User.class, user.getId(), prior_revision);
    else
        return null
}

这可以概括为:

public static T getPreviousVersion(T entity, int current_rev) {
    AuditReader reader = AuditReaderFactory.get(JPA.em());

    Number prior_revision = (Number) reader.createQuery()
    .forRevisionsOfEntity(entity.getClass(), false, true)
    .addProjection(AuditEntity.revisionNumber().max())
    .add(AuditEntity.id().eq(((Model) entity).id))
    .add(AuditEntity.revisionNumber().lt(current_rev))
    .getSingleResult();

    if (prior_revision != null)
        return (T) reader.find(entity.getClass(), ((Model) entity).id, prior_revision);
    else
        return null
}

这种概括的唯一棘手之处是获取实体的 ID。因为我正在使用 Play!框架,我可以利用所有实体都是模型这一事实并使用 ((Model) entity).id 来获取 id,但您必须调整它以适应您的环境。

关于java - 在 Hibernate Envers 中获取以前版本的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/793674/

相关文章:

java - GWT 2.0 主题?

java - Spring JPA 保存 transient 实体

java - 线程中出现异常 "Thread-10"java.lang.IllegalStateException

java - 架构管理异常 : Schema-validation: missing table [chk_groups] even when table is present in DB

jboss - Jboss EAP 6 的默认管理控制台密码是什么

java - 等待执行者

java - 如何在逻辑语句中#evaluate 速度变量?

apache - 如何在 JBOSS 6 EAP icm AJP 和 SSL 卸载中访问 X509 subject.serialnumber

java - 具有相同@RequestMapping的Spring MVC多个 Controller

java - Jboss hibernate 工具 : Reading error schema - Probably a JDBC driver Issue