public class BaseRepositoryFactoryBean, T, I extends Serializable> extends JpaRepositoryFactoryBean { @SuppressWarnings("rawtypes") @Override protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) { return new BaseRepositoryFactory(entityManager); } private static class BaseRepositoryFactory extends JpaRepositoryFactory { private final EntityManager em; public BaseRepositoryFactory(EntityManager em) { super(em); this.em = em; } @SuppressWarnings({ "unchecked", "rawtypes", "hiding" }) protected SimpleJpaRepository getTargetRepository(RepositoryMetadata metadata, EntityManager entityManager) { SimpleJpaRepository repo = new BaseRepositoryImpl(metadata.getDomainType(), entityManager); return repo; } protected Class getRepositoryBaseClass(RepositoryMetadata metadata) { return BaseRepositoryImpl.class; } } }