Программное создание типизированного 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);