Я использую репозиторий Spring JPA для подключения к Oracle.
Мой пакет репозитория com.demo.infrastructure.repository; Класс репозитория - StoreRepo. java
@Repository
public interface StoreRepo extends JpaRepository<StoreAttribute, String> {
@Query("select storeAttributeName from StoreAttribute order by storeAttributeName asc")
List<String> fetchAllStoreAttributeNames();
List<StoreAttribute> findAllByOrderByStoreAttributeNameAsc();
}
Проблема : Я использую JNDI config для настройки источника данных. В настоящее время он имеет только одну запись JNDI. Теперь я хочу использовать два имени пользователя для одной и той же базы данных, одно с правами администратора (чтение и запись), а другое с доступом пользователя (только чтение). Оба этих пользователя будут иметь доступ к одному и тому же репозиторию и одному и тому же объекту.
Я попробовал уже имеющиеся решения, в которых используются два разных пакета репозитория для каждого источника данных. Но я хочу, чтобы репозиторий «StoreRepo» был таким же.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactoryAdmin",
basePackages = { "com.demo.infrastructure.repository" }
)
public class DataSourceAdminConfig {
@Primary
@Bean(name = "dataSourceAdmin")
public DataSource dataSource() {
return new JndiDataSourceLookup().getDataSource("jdbc/myds_admin");
}
@Primary
@Bean(name = "entityManagerFactoryAdmin")
public LocalContainerEntityManagerFactoryBean
entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSourceAdmin") DataSource dataSource
) {
return builder.dataSource(dataSource).
packages("com.demo.domain.model.entities").
persistenceUnit("read-write").
build();
}
@Primary
@Bean(name = "transactionManagerAdmin")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactoryAdmin") EntityManagerFactory
entityManagerFactory
) {
return new JpaTransactionManager(entityManagerFactory);
}
}
У меня должно быть два таких класса с различным пакетом (см. BasePackages). Но я не хочу, чтобы это решение вместо этого хотело использовать один пакет репозитория и тот же класс репозитория.