-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Open
Labels
status: pending-design-workNeeds design work before any code can be developedNeeds design work before any code can be developedtype: enhancementA general enhancementA general enhancement
Description
Recently in my job I had to expand the functionality of the RevisionRepository and I thought that could be great if this posibility is added to the Spring Data project.
To achieve this, I added the following method to the EnversRevisionRepositoryFactoryBean, treating it as if we were modifying the revision entity:
public void setRepositoryImplClass(Class<? extends EnversRevisionRepositoryImpl<T, S, N>> repositoryImplClass) {
this.repositoryImplClass = repositoryImplClass;
}
This ensures the default behavior when the new parameter is null:
private static class RevisionRepositoryFactory<T, ID, N extends Number & Comparable<N>> extends JpaRepositoryFactory {
private final Class<?> repositoryClass;
public RevisionRepositoryFactory(EntityManager entityManager, Class<?> revisionEntityClass, Class<?> repositoryImplClass) {
// original implementation
this.repositoryClass = repositoryImplClass != null ? repositoryImplClass : EnversRevisionRepositoryImpl.class;
}
@Override
protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata) {
Object fragmentImplementation = getTargetRepositoryViaReflection(
repositoryClass,
getEntityInformation(metadata.getDomainType()),
revisionEntityInformation,
entityManager
);
// original implementation
}
}
Additionally, to maintain consistency with the return types of the original repository implementation, I changed the visibility of these methods and classes to protected:
public class EnversRevisionRepositoryImpl<T, ID, N extends Number & Comparable<N>>
implements RevisionRepository<T, ID, N> {
protected AuditOrder mapRevisionSort(RevisionSort revisionSort)
protected List<AuditOrder> mapPropertySort(Sort sort)
protected AuditQuery createBaseQuery(ID id)
protected Revision<N, T> createRevision(QueryResult<T> queryResult)
protected static class QueryResult<T> {
protected QueryResult(Object[] data)
protected RevisionMetadata<?> createRevisionMetadata()
protected static RevisionMetadata.RevisionType convertRevisionType(RevisionType datum)
}
}
Feel free to provide comments or advice in case I've attempted to reinvent the wheel or if there's an easier way to achieve this exact functionality
Bragolgirith
Metadata
Metadata
Assignees
Labels
status: pending-design-workNeeds design work before any code can be developedNeeds design work before any code can be developedtype: enhancementA general enhancementA general enhancement