1

我使用基于模式的多租户两个MultiTenantConnectionProvider & CurrentTenantIdentifierResolver提供实现。尝试为单个承租人获得休眠会话会导致NPE失败。 展望Hibernate的源代码,似乎JDBCServicesImpl初始化的ConnectionProvider为NULL else块Hibernate的多重任务处理测试失败,NPE

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

有一些基本的东西我错过了?

+0

嗨,你可以张贴错误堆栈跟踪?我想检查你在哪里得到NPE。 –

+0

当然,我已附加它作为另一个pastebin到帖子 –

回答

2

那么,看了一段时间后的源代码。 Hibernate(至今)不支持模式导出。这取自他们的documentation

目前架构的出口不会真正与多租户工作。这可能不会改变

所以,在你的情况下,解决将是删除此行

config.getProperties().put(AvailableSettings.HBM2DDL_AUTO, "validate"); 
+1

伟大的工程! –