Example usage for org.hibernate.envers AuditReader find

List of usage examples for org.hibernate.envers AuditReader find

Introduction

In this page you can find the example usage for org.hibernate.envers AuditReader find.

Prototype

<T> T find(Class<T> cls, Object primaryKey, Date date) throws IllegalArgumentException, NotAuditedException,
        RevisionDoesNotExistException, IllegalStateException;

Source Link

Document

Find an entity by primary key on the given date.

Usage

From source file:com.wiiyaya.framework.provider.repository.revision.BaseRevisionDaoImpl.java

License:Apache License

@SuppressWarnings("unchecked")
public Revision<N, T> findLastChangeRevision(ID id) {

    Class<T> type = entityInformation.getJavaType();
    AuditReader reader = AuditReaderFactory.get(entityManager);

    List<Number> revisions = reader.getRevisions(type, id);

    if (revisions.isEmpty()) {
        return null;
    }/*from   w w  w.  j  a  v a 2s. c om*/

    N latestRevision = (N) revisions.get(revisions.size() - 1);

    Class<?> revisionEntityClass = revisionEntityInformation.getRevisionEntityClass();

    Object revisionEntity = reader.findRevision(revisionEntityClass, latestRevision);
    RevisionMetadata<N> metadata = (RevisionMetadata<N>) getRevisionMetadata(revisionEntity);
    return new Revision<N, T>(metadata, reader.find(type, id, latestRevision));
}

From source file:com.wiiyaya.framework.provider.repository.revision.BaseRevisionDaoImpl.java

License:Apache License

@SuppressWarnings("unchecked")
private Revisions<N, T> getEntitiesForRevisions(List<N> revisionNumbers, ID id, AuditReader reader) {

    Class<T> type = entityInformation.getJavaType();
    Map<N, T> revisions = new HashMap<N, T>(revisionNumbers.size());

    Class<?> revisionEntityClass = revisionEntityInformation.getRevisionEntityClass();
    Map<Number, Object> revisionEntities = (Map<Number, Object>) reader.findRevisions(revisionEntityClass,
            new HashSet<Number>(revisionNumbers));

    for (Number number : revisionNumbers) {
        revisions.put((N) number, reader.find(type, id, number));
    }//from www  .  java  2 s  . c o m

    return new Revisions<N, T>(toRevisions(revisions, revisionEntities));
}

From source file:com.wiiyaya.framework.provider.repository.revision.BaseRevisionDaoImpl.java

License:Apache License

@SuppressWarnings("unchecked")
private Revision<N, T> getEntityForRevision(N revisionNumber, ID id, AuditReader reader) {

    Class<?> type = revisionEntityInformation.getRevisionEntityClass();

    T revision = (T) reader.findRevision(type, revisionNumber);
    Object entity = reader.find(entityInformation.getJavaType(), id, revisionNumber);

    return new Revision<N, T>((RevisionMetadata<N>) getRevisionMetadata(revision), (T) entity);
}

From source file:de.iteratec.iteraplan.persistence.dao.HistoryDAOImpl.java

License:Open Source License

public <T extends BuildingBlock> T getPreceedingRevisionFor(Class<T> entityClass, Integer bbId,
        Integer currentRevId) {/*from   w w  w .j a  v a  2  s  .c o m*/
    AuditReader auditReader = getAuditReader();

    // Query to get max Rev less than this one (Should exist, since this is a MOD, but might not
    Number prevRev = (Number) auditReader.createQuery().forRevisionsOfEntity(entityClass, true, true)
            .addProjection(AuditEntity.revisionNumber().max()).add(AuditEntity.id().eq(bbId))
            .add(AuditEntity.revisionNumber().lt(currentRevId)).getSingleResult();

    // If History recording was off during the Initial creation of this BB, this MOD rev might be the
    // first known rev
    if (prevRev == null) {
        return null;
    }

    return auditReader.find(entityClass, bbId, prevRev);
}

From source file:org.agatom.springatom.data.hades.repo.factory.NVersionedRepositoryImpl.java

License:Open Source License

/** {@inheritDoc} */
@Override//from   w  ww.  j a v a2  s .c  o  m
@SafeVarargs
@SuppressWarnings("unchecked")
public final Revisions<Long, T> findInRevisions(final Long id, final Long... revisionNumbers) {
    Preconditions.checkArgument(id != null, ERROR_MESSAGE_ID);
    Preconditions.checkArgument(revisionNumbers.length >= 1, ERROR_MESSAGE_INSUFFICIENT_REV_NUMBERS);

    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace(String.format("%s(%s,%s)", "findInRevision", id, Arrays.toString(revisionNumbers)));
    }

    final Class<T> type = this.entityInformation.getJavaType();
    final AuditReader reader = AuditReaderFactory.get(this.entityManager);
    final Map<Long, T> revisions = new HashMap<>(revisionNumbers.length);
    final Class<?> revisionEntityClass = this.revisionEntityInformation.getRevisionEntityClass();
    final Map<Number, Object> revisionEntities = (Map<Number, Object>) reader.findRevisions(revisionEntityClass,
            new HashSet<Number>(Lists.newArrayList(revisionNumbers)));

    for (Number number : revisionNumbers) {
        revisions.put((Long) number, reader.find(type, id, number));
    }

    return new Revisions<>(this.toRevisions(revisions, revisionEntities));
}

From source file:org.asqatasun.entity.dao.audit.ProcessResultDAOImpl.java

License:Open Source License

@Override
public List<DefiniteResult> getHistoryChanges(ProcessResult processResultImpl) {

    List<DefiniteResult> history = new ArrayList<>();
    AuditReader auditReader = AuditReaderFactory.get(this.entityManager);
    Long id = processResultImpl.getId();
    if (id == null) {
        return new ArrayList<>();
    }// w w w.  j  av  a 2  s.c om
    List<Number> revisions = auditReader.getRevisions(processResultImpl.getClass(), id);
    DefiniteResult find = null;
    for (int i = 0; i < revisions.size(); i++) {
        Number revision = revisions.get(i);
        find = auditReader.find(DefiniteResultImpl.class, id, revision);
        history.add(find);
    }

    return history;

}

From source file:org.bitbucket.fbascheper.tutorial.envers.EnversIllustrationTest.java

License:Apache License

@Test
public void testOne() {

    // create a couple of events
    final Event event1 = getTransactionTemplate().execute(new TransactionCallback<Event>() {
        @Override/*from   ww w.j  a va 2 s .  c om*/
        public Event doInTransaction(TransactionStatus status) {
            // revision 1
            Event event = new Event("Our very first event!", new Date());
            getEntityManager().persist(event);
            return event;

        }
    });
    final Event event2 = getTransactionTemplate().execute(new TransactionCallback<Event>() {
        @Override
        public Event doInTransaction(TransactionStatus status) {
            // revision 2
            Event event = new Event("A follow up event", new Date());
            getEntityManager().persist(event);
            return event;

        }
    });

    // now lets pull events from the database and list them

    List<Event> result = getTransactionTemplate().execute(new TransactionCallback<List<Event>>() {
        @Override
        public List<Event> doInTransaction(TransactionStatus status) {
            List<Event> result = getEntityManager().createQuery("select evt from Event evt", Event.class)
                    .getResultList();
            for (Event event : result) {
                System.out.println("Event (" + event.getDate() + ") : " + event.getTitle());
            }

            return result;
        }
    });

    // verify that id's were generated
    final Long event1Id = event1.getId();
    final Long event2Id = event2.getId();

    assertThat(event1Id, notNullValue());
    assertThat(event2Id, notNullValue());

    // so far the code is the same as we have seen in previous tutorials.  Now lets leverage Envers...
    // first lets create some revisions
    getTransactionTemplate().execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {
            // revision 3
            Event myEvent = getEntityManager().find(Event.class, event2Id);
            myEvent.setDate(new Date());
            myEvent.setTitle(myEvent.getTitle() + " (rescheduled)");

        }
    });

    // and then use an AuditReader to look back through history
    getTransactionTemplate().execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {

            Event myEvent = getEntityManager().find(Event.class, event2Id);
            assertThat("A follow up event (rescheduled)", is(myEvent.getTitle()));

            AuditReader reader = AuditReaderFactory.get(getEntityManager());

            List<? extends Number> event2Revisions = reader.getRevisions(Event.class, event2Id);
            assertThat(event2Revisions.size(), is(2));

            long event2Revision1 = event2Revisions.get(0).longValue();
            long event2Revision2 = event2Revisions.get(1).longValue();

            assertThat(event2Revision1, is(2L));
            assertThat(event2Revision2, is(3L));

            Event firstRevision = reader.find(Event.class, event2Id, event2Revision1);

            assertThat(firstRevision, notNullValue());
            assertThat(firstRevision.getTitle(), notNullValue());
            assertThat(firstRevision.getTitle(), not(is(myEvent.getTitle())));
            assertThat(firstRevision.getDate(), not(is(myEvent.getDate())));

            Event secondRevision = reader.find(Event.class, event2Id, event2Revision2);
            assertThat(secondRevision, notNullValue());
            assertThat(secondRevision.getTitle(), notNullValue());
            assertThat(secondRevision.getTitle(), is(myEvent.getTitle()));
            assertThat(secondRevision.getDate(), is(myEvent.getDate()));

        }

    });

}

From source file:org.jboss.as.test.compat.jpa.hibernate.envers.SLSBPU.java

License:Open Source License

public int retrieveOldPersonVersionFromAddress(int id) {
    AuditReader reader = AuditReaderFactory.get(em);
    Address address1_rev = reader.find(Address.class, id, 1);
    return address1_rev.getPersons().size();
}

From source file:org.jboss.as.test.integration.hibernate.envers.SFSBHibernateEnversSessionFactory.java

License:Open Source License

public StudentAudited retrieveOldStudentVersion(int id) {
    AuditReader reader = AuditReaderFactory.get(sessionFactory.openSession());
    StudentAudited student_rev = reader.find(StudentAudited.class, id, 1);
    List<Number> revlist = reader.getRevisions(StudentAudited.class, id);
    // this is for checking revision size hence not removing this S.o.p
    //System.out.println("Size of revisionList:--" + revlist.size());
    return student_rev;
}

From source file:org.jboss.as.test.integration.jpa.transaction.envers.SFSB1.java

License:Open Source License

public String retrieveOldEmployeeVersion(int id) {
    AuditReader reader = AuditReaderFactory.get(em);
    Employee emp1_rev = reader.find(Employee.class, id, 1);
    return emp1_rev.getAddress();
}