diff --git a/pom.xml b/pom.xml
index feed177..5bb4ad9 100755
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,11 @@
BLE
www.ble.de
+
+ Michael Igler
+ michael.igler@forward-tech.de
+ Freelancer
+
diff --git a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java
index da9d483..965da4a 100644
--- a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java
+++ b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java
@@ -17,6 +17,7 @@ package org.springframework.data.envers.repository.support;
import java.io.Serializable;
+import org.springframework.data.history.Revision;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.history.RevisionRepository;
@@ -24,11 +25,12 @@ import org.springframework.data.repository.history.RevisionRepository;
/**
* Convenience interface to allow pulling in {@link JpaRepository} and {@link RevisionRepository} functionality in one
* go.
- *
+ *
* @author Oliver Gierke
*/
@NoRepositoryBean
-public interface EnversRevisionRepository> extends
- RevisionRepository, JpaRepository {
+public interface EnversRevisionRepository>
+ extends RevisionRepository, JpaRepository {
+ Revision findRevision(ID id, N revisionNumber);
}
diff --git a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java
index 70a250b..707f95b 100755
--- a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java
+++ b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java
@@ -16,12 +16,7 @@
package org.springframework.data.envers.repository.support;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
@@ -47,12 +42,12 @@ import org.springframework.util.Assert;
/**
* Repository implementation using Hibernate Envers to implement revision specific query methods.
- *
+ *
* @author Oliver Gierke
* @author Philipp Huegelmeyer
+ * @author Michael Igler
*/
-public class EnversRevisionRepositoryImpl> extends
- SimpleJpaRepository implements RevisionRepository {
+public class EnversRevisionRepositoryImpl> extends SimpleJpaRepository implements RevisionRepository {
private final EntityInformation entityInformation;
private final RevisionEntityInformation revisionEntityInformation;
@@ -61,13 +56,13 @@ public class EnversRevisionRepositoryImpl entityInformation,
- RevisionEntityInformation revisionEntityInformation, EntityManager entityManager) {
+ RevisionEntityInformation revisionEntityInformation, EntityManager entityManager) {
super(entityInformation, entityManager);
@@ -103,6 +98,14 @@ public class EnversRevisionRepositoryImpl(metadata, reader.find(type, id, latestRevision));
}
+ @SuppressWarnings("unchecked")
+ public Revision findRevision(ID id, N revisionNumber) {
+
+ AuditReader reader = AuditReaderFactory.get(entityManager);
+
+ return getEntityForRevision(revisionNumber, id, reader);
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.repository.history.RevisionRepository#findRevisions(java.io.Serializable)
@@ -130,7 +133,7 @@ public class EnversRevisionRepositoryImpl revisionNumbers = reader.getRevisions(type, id);
if (pageable.getOffset() > revisionNumbers.size()) {
- return new PageImpl>(Collections.> emptyList(), pageable, 0);
+ return new PageImpl>(Collections.>emptyList(), pageable, 0);
}
int upperBound = pageable.getOffset() + pageable.getPageSize();
@@ -142,9 +145,10 @@ public class EnversRevisionRepositoryImpl>(revisions.getContent(), pageable, revisionNumbers.size());
}
+
/**
* Returns the entities in the given revisions for the entitiy with the given id.
- *
+ *
* @param revisionNumbers
* @param id
* @param reader
@@ -167,6 +171,25 @@ public class EnversRevisionRepositoryImpl(toRevisions(revisions, revisionEntities));
}
+ /**
+ * Returns an entity in the given revision for the given entity-id.
+ *
+ * @param revisionNumber
+ * @param id
+ * @param reader
+ * @return
+ */
+ private Revision getEntityForRevision(N revisionNumber, ID id, AuditReader reader) {
+
+ Class> revisionEntityClass = revisionEntityInformation.getRevisionEntityClass();
+
+ T revision = (T) reader.findRevision(revisionEntityClass, revisionNumber);
+
+ RevisionMetadata metadata = (RevisionMetadata) getRevisionMetadata(revision);
+
+ return new Revision(metadata, revision);
+ }
+
@SuppressWarnings("unchecked")
private List> toRevisions(Map source, Map revisionEntities) {
@@ -186,7 +209,7 @@ public class EnversRevisionRepositoryImpl> revisions = licenseRepository.findRevisions(license.id, new PageRequest(0, 10));
Revisions wrapper = new Revisions(revisions.getContent());
assertThat(wrapper.getLatestRevision(), is(revision));
+
+
+ List> revisionsDe = countryRepository.findRevisions(de.id).getContent();
+ for (Revision revisionDe: revisionsDe) {
+ System.out.println("revisionDe.getRevisionNumber(): " + revisionDe.getRevisionNumber());
+ System.out.println("revisionDe.getEntity().name: " + revisionDe.getEntity().name);
+ }
+
+ Revision originalCountryRevision = enversRevisionRepository.findRevision(de.id, 2);
+
+ Country originalCountry = originalCountryRevision.getEntity();
+ assertThat(originalCountry.name, is("Deutschland"));
}
@Test
diff --git a/src/test/java/org/springframework/data/envers/sample/CountryRepository.java b/src/test/java/org/springframework/data/envers/sample/CountryRepository.java
index 26232d8..aee5fe0 100755
--- a/src/test/java/org/springframework/data/envers/sample/CountryRepository.java
+++ b/src/test/java/org/springframework/data/envers/sample/CountryRepository.java
@@ -15,6 +15,7 @@
*/
package org.springframework.data.envers.sample;
+import org.springframework.data.envers.repository.support.EnversRevisionRepository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.history.RevisionRepository;
@@ -23,6 +24,6 @@ import org.springframework.data.repository.history.RevisionRepository;
*
* @author Oliver Gierke
*/
-public interface CountryRepository extends RevisionRepository, JpaRepository {
+public interface CountryRepository extends EnversRevisionRepository, JpaRepository {
}