diff --git a/spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryFactoryBean.java b/spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryFactoryBean.java index 9f40559ca4..5fd19bb338 100755 --- a/spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryFactoryBean.java +++ b/spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryFactoryBean.java @@ -25,7 +25,6 @@ import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryComposition.RepositoryFragments; -import org.springframework.data.repository.core.support.RepositoryFactorySupport; import org.springframework.data.repository.history.RevisionRepository; import org.springframework.data.repository.history.support.RevisionEntityInformation; @@ -59,7 +58,7 @@ public void setRevisionEntityClass(Class revisionEntityClass) { } @Override - protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) { + protected JpaRepositoryFactory createJpaRepositoryFactory(EntityManager entityManager){ return new RevisionRepositoryFactory(entityManager, revisionEntityClass); } @@ -72,7 +71,6 @@ protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityM private static class RevisionRepositoryFactory> extends JpaRepositoryFactory { private final RevisionEntityInformation revisionEntityInformation; - private final EntityManager entityManager; /** * Creates a new {@link RevisionRepositoryFactory} using the given {@link EntityManager} and revision entity class. @@ -84,7 +82,6 @@ public RevisionRepositoryFactory(EntityManager entityManager, Class revisionE super(entityManager); - this.entityManager = entityManager; this.revisionEntityInformation = Optional.ofNullable(revisionEntityClass) // .filter(it -> !it.equals(DefaultRevisionEntity.class))// . map(ReflectionRevisionEntityInformation::new) // @@ -98,7 +95,7 @@ protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata EnversRevisionRepositoryImpl.class, // getEntityInformation(metadata.getDomainType()), // revisionEntityInformation, // - entityManager // + getEntityManager() // ); return RepositoryFragments // diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java index e14658773b..153c3a998b 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java @@ -293,13 +293,41 @@ protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata return RepositoryFragments.empty(); } - private void invokeAwareMethods(JpaRepositoryConfigurationAware repository) { + protected void invokeAwareMethods(JpaRepositoryConfigurationAware repository) { repository.setRepositoryMethodMetadata(crudMethodMetadata); repository.setEscapeCharacter(escapeCharacter); repository.setProjectionFactory(getProjectionFactory()); } + protected EntityManager getEntityManager() { + return entityManager; + } + + protected QueryExtractor getExtractor() { + return extractor; + } + + protected CrudMethodMetadata getCrudMethodMetadata() { + return crudMethodMetadata; + } + + protected EntityPathResolver getEntityPathResolver() { + return entityPathResolver; + } + + protected EscapeCharacter getEscapeCharacter() { + return escapeCharacter; + } + + protected JpaQueryMethodFactory getQueryMethodFactory() { + return queryMethodFactory; + } + + protected QueryRewriterProvider getQueryRewriterProvider() { + return queryRewriterProvider; + } + private static boolean isTransactionNeeded(Class repositoryClass) { Method[] methods = ReflectionUtils.getAllDeclaredMethods(repositoryClass); diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java index 86f2f14d6c..1d4667b317 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java @@ -113,7 +113,7 @@ protected RepositoryFactorySupport doCreateRepositoryFactory() { */ protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) { - JpaRepositoryFactory jpaRepositoryFactory = new JpaRepositoryFactory(entityManager); + JpaRepositoryFactory jpaRepositoryFactory = createJpaRepositoryFactory(entityManager); jpaRepositoryFactory.setEntityPathResolver(entityPathResolver); jpaRepositoryFactory.setEscapeCharacter(escapeCharacter); @@ -124,6 +124,11 @@ protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityM return jpaRepositoryFactory; } + protected JpaRepositoryFactory createJpaRepositoryFactory(EntityManager entityManager) { + + return new JpaRepositoryFactory(entityManager); + } + @Override public void afterPropertiesSet() { @@ -136,4 +141,21 @@ public void setEscapeCharacter(char escapeCharacter) { this.escapeCharacter = EscapeCharacter.of(escapeCharacter); } + + @Nullable + protected EntityManager getEntityManager() { + return entityManager; + } + + protected EntityPathResolver getEntityPathResolver() { + return entityPathResolver; + } + + protected EscapeCharacter getEscapeCharacter() { + return escapeCharacter; + } + + protected JpaQueryMethodFactory getQueryMethodFactory() { + return queryMethodFactory; + } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutor.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutor.java index b37a6e0209..f28e22f258 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutor.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutor.java @@ -297,6 +297,27 @@ protected JPQLQuery createCountQuery(@Nullable Predicate... predicate) { return doCreateQuery(getQueryHintsForCount(), predicate); } + protected JpaEntityInformation getEntityInformation() { + return entityInformation; + } + + protected EntityPath getPath() { + return path; + } + + protected Querydsl getQuerydsl() { + return querydsl; + } + + protected EntityManager getEntityManager() { + return entityManager; + } + + @Nullable + public CrudMethodMetadata getMetadata() { + return metadata; + } + @Nullable private CrudMethodMetadata getRepositoryMethodMetadata() { return metadata;