Я использую мультитенантность на основе схемы, предоставляя реализации как для MultiTenantConnectionProvider, так и для CurrentTenantIdentifierResolver. Попытка получить сеанс гибернации для одного арендатора не удалась с помощью NPE. Глядя на исходный код hibernate, кажется, что JDBCServicesImpl инициализирует connectionProvider значением null в блоке else.
private JdbcConnectionAccess buildJdbcConnectionAccess(Map configValues) {
final MultiTenancyStrategy multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configValues );
if ( MultiTenancyStrategy.NONE == multiTenancyStrategy ) {
connectionProvider = serviceRegistry.getService( ConnectionProvider.class );
return new ConnectionProviderJdbcConnectionAccess( connectionProvider );
}
else {
connectionProvider = null;
final MultiTenantConnectionProvider multiTenantConnectionProvider = serviceRegistry.getService( MultiTenantConnectionProvider.class );
return new MultiTenantConnectionProviderJdbcConnectionAccess( multiTenantConnectionProvider );
}
}
Пожалуйста, найдите тестовый пример для этого здесь - http://pastebin.com/7Mt9wtHt и его трассировку стека - http://pastebin.com/8ygAu7eh
Есть ли что-то основное, что я упускаю?