Программное создание типизированного JPA репозитория

Работаю со Spring boot и Hibernate. В проекте присутствует много сущностей. Чтобы получить объекты этих сущностей из БД для каждой из них создается типизированный JPA репозиторий.

@Repository
public interface OrganizationRepository extends JpaRepository<User, Long> {
}

@Repository
public interface OrganizationRepository extends JpaRepository<Organization, Long> {
}

@Repository
public interface OrganizationRepository extends JpaRepository<Customer, Long> {
}

Есть ли возможность получать бины нужных JPA репозиториев программно в runtime'е, не создавая для них отдельных репозиториев? Т.е. создать фабрику, которая по предоставленному типу сущности создаст репозиторий для этой сущности.

public <T, ID> JpaRepository getRepository(Class<T> tClass, Class<ID> idClass) {
    ...
    JpaRepository<T, ID> jpaRepository = ... **магия**
    return jpaRepository;

}

Ответы (1 шт):

Автор решения: Roman Konoval

Воспользуйтесь SimpleJpaRepository:

class RepositoryFactory {
  @Autowired
  private EntityManager entityManager;

  public <T, ID> JpaRepository<T, ID> getRepository(Class<T> tClass) {
    return new SimpleJpaRepository<T, ID>(tClass, entityManager);
  }
}

Использование:

RepositoryFactory repoFactory = ...;
JpaRepository<Customer, Long> customerRepo = repoFactory.getRepository(Customer.class);
→ Ссылка