Hibernate 多租户测试因 NPE 而失败

Hibernate multitenancy test fails with NPE

我正在使用基于模式的多租户,为 MultiTenantConnectionProvider 和 CurrentTenantIdentifierResolver 提供实现。尝试为单个租户获取休眠会话失败并出现 NPE。 查看 hibernate 的源代码,似乎 JDBCServicesImpl 在 else 块中将 connectionProvider 初始化为 null

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 and its stacktrace - http://pastebin.com/8ygAu7eh

我是否遗漏了一些基本的东西?

我也遇到了同样的问题。当我用谷歌搜索时,休眠中为此发布了一个错误。 这里是linkhttps://hibernate.atlassian.net/browse/HHH-7395

嗯,看了一会儿源代码之后。 Hibernate(目前)不支持模式导出。这是取自他们的 documentation.

Currently schema export will not really work with multi-tenancy. That may not change

因此,对于您的情况,解决方法是删除此行

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