При использовании @entityscan все объекты в указанных базовыхпадах поднимаются сканированием. По определенным причинам мы хотели бы избежать этого. При установке Single ManagedTypes.
На самом деле мы были удивлены, что мы не смогли найти какой -либо пост, вопрос, вопрос StackOverflow и т. Д. Рекомендуется ли вопрос «Возможно ли настроить @EntityScan или альтернативу отслеживать только отдельные классы, а не полные пакеты?». /> javadoc of localcontainerentitymanagerfactorybean.setManagedTypes < /code> даже говорит: < /p>
Установите Persistencemanagedtypes для использования для составления списка управляемых типов в качестве альтернативы для организации объекта. https: //docs.spring.io...orm/jpa/localcontainerentitymanagerfactorybean
Я создал пример проекта, чтобы продемонстрировать идею: https://github.com/frankkriegl-zero/jpa ... n-79541611
из класса конфигурации Jpaconfig:
@Configuration
public class JpaConfig {
List sharedManagedEntityClassNames = Stream.of(
external.model.Book.class // located in a 'remote' package, outside of org.example.bookstore
).map(Class::getName).toList();
List managedEntityPackages = List.of(
"org.example.bookstore.model"
);
@Bean(name = "persistenceManagedTypes")
PersistenceManagedTypes persistenceManagedTypes(ResourceLoader resourceLoader) {
var scanResult = new PersistenceManagedTypesScanner(resourceLoader)
.scan(managedEntityPackages.toArray(new String[0]));
// merge the shared managed entity class names with the scanned ones
List managedClassNames = new ArrayList();
managedClassNames.addAll(sharedManagedEntityClassNames);
managedClassNames.addAll(scanResult.getManagedClassNames());
return PersistenceManagedTypes.of(managedClassNames, Collections.emptyList());
}
// entityManagerFactoryBean
}
< /code>
Вот как мы переопределяем компонент EntityManagerFactory: < /p>
@Bean(name = "entityManagerFactory")
public EntityManagerFactory entityManagerFactory(DataSource dataSource,
PersistenceManagedTypes managedTypes) {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factoryBean.setManagedTypes(managedTypes); // alternative to @EntityScan and @EnableJpaRepositories
factoryBean.afterPropertiesSet();
return factoryBean.getObject();
}
< /code>
Мы не чувствуем себя слишком уверенно в создании наших собственных эмфакционных бобов, так как это является основой каждой логики, связанной с JPA в приложении на основе JPA: < /p>
Мы не уверены, что это может создать дополнительные усилия по обслуживанию в случае реализации фреймворта (Spring Boot Boot или Hibernate). Скорее сложные настройки конфигурации, мы несколько боимся наблюдения за что -то контролировать и разбивать слой постоянства приложения.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... of-entitys
Использование LocalContainerTityManagerFactoryBean.SetManagedTypes вместо @entityScan (Spring Boot) ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение