Я реализовал многопользовательский режим Hibernate на основе схемы, реализовав MultiTenantConnectionProvider интерфейс. Не вдаваясь в подробности, моя реализация getConnection выбирает схему, например:
USE tanant_name
Пока все хорошо, это работает. В качестве следующего шага я хочу провести модульное тестирование этого материала. Я использовал SpringBoot и базу данных H2 в памяти для тестирования.
Синтаксис H2 отличается от MySQL. Во H2, используя схему, сделанную:
SET SCHEMA tanant_name
Я пытался установить режим совместимости с MYSQL, например:
SET MODE MySQL
Это, похоже, не имеет никакого эффекта, возможно, из-за ограничений совместимости с MYSQL (точно не знаю).
Есть ли другие варианты для модульного тестирования моей конфигурации Hibernate?
Кстати: многопользовательская конфигурация - это конфигурация Java, и она автоматически внедряется Spring во время начальной загрузки приложения. Это выглядит следующим образом:
@Configuration
public class HibernateMultitenancyConfig {
@Autowired
private JpaProperties jpaProperties;
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
return new HibernateJpaVendorAdapter();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
Map<String, Object> properties = new HashMap<>();
properties.putAll(jpaProperties.getProperties());
properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("com.my.package");
em.setJpaVendorAdapter(jpaVendorAdapter());
em.setJpaPropertyMap(properties);
return em;
}
}