Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠';s使用独立模式的多租户 问题_Java_Hibernate_Spring Data_Spring Data Jpa_Multi Tenant - Fatal编程技术网

Java 冬眠';s使用独立模式的多租户 问题

Java 冬眠';s使用独立模式的多租户 问题,java,hibernate,spring-data,spring-data-jpa,multi-tenant,Java,Hibernate,Spring Data,Spring Data Jpa,Multi Tenant,我在Spring4、Hibernate5和SpringDataJPA1.7上构建了一个应用程序。我使用PostgresSQL作为数据库。我想使用Hibernate对多租户的支持,但在正确实现MultiTenantConnectionProvider时遇到问题。我想使用模式策略来分离租户,我更喜欢使用单个数据源 我当前实现的MultiTenantConnectionProvider方法getConnection()如下所示: @覆盖 公共连接getConnection(字符串租户标识符)引发SQL

我在Spring4、Hibernate5和SpringDataJPA1.7上构建了一个应用程序。我使用PostgresSQL作为数据库。我想使用Hibernate对多租户的支持,但在正确实现
MultiTenantConnectionProvider
时遇到问题。我想使用模式策略来分离租户,我更喜欢使用单个
数据源

我当前实现的
MultiTenantConnectionProvider
方法
getConnection()
如下所示:

@覆盖
公共连接getConnection(字符串租户标识符)引发SQLException{
最终连接=getAnyConnection();
试一试{
connection.createStatement().execute(“SET SCHEMA'+tenantIdentifier+”);
}
捕获(SQLE异常){
抛出新的HibernateException(“无法将JDBC连接更改为指定的架构[“+tenantIdentifier+”],e);
}
回路连接;
}
我从我的
数据源
中获取
连接
,我通过实现接口
ServiceRegistryAwareService
来注入该连接,但我不确定这是否正确

方法在应该使用正确的
tenantIdentifier
(从我的
CurrentTenantIdentifierResolver
实现中提交)时被调用,语句被执行,但在实践中,它是无用的。问题是,Hibernate生成的查询包含表的完全限定名,包括默认模式。我可以告诉hibernate从查询中省略默认模式吗?或者我应该使用完全不同的方法

我的配置 我不想用太多的配置把我的问题弄得一团糟,我会把我认为相关的东西粘贴到这里。如果我错过了重要的事情,请告诉我

这是我的应用程序上下文xml的一部分


附带问题
从hibernate的角度来看,
hibernate.Multitenance
SCHEMA
数据库
之间有什么区别吗?我理解这两者在概念上的区别,但从源代码来看,在我看来这两者是完全可以互换的,所有的逻辑都隐藏在
MultiTenantConnectionProvider
的实现中。我遗漏了什么吗?

您好,您是否找到了一个在创建新租户时在运行时创建模式的工作示例?遗憾的是,我们最终采用了单独的数据库策略。我无法从Hibernate的查询中删除默认的“public”模式。新数据库由管理员手动创建。这对我们来说不是问题,因为在我们的应用程序中创建新租户是非常罕见的。我们每天不会创建太多租户,我仍然可以在晚上运行批处理来手动创建模式。但是,在尝试编写代码之前,有一个问题是,在手动创建模式之后,我是否必须重新启动应用程序?谢谢。我不知道,我对SQL模式和Hibernate没有太多经验。我想这会管用,但最好的办法就是试试:)顺便说一句,你有模式策略的工作配置吗?我已经醒了30个小时了,所以我现在要崩溃了。当我实施它时,我会通知你;)bientôtHi,您是否找到了一个在创建新租户时在运行时创建模式的工作示例?遗憾的是,没有,我们最终采用了单独的数据库策略。我无法从Hibernate的查询中删除默认的“public”模式。新数据库由管理员手动创建。这对我们来说不是问题,因为在我们的应用程序中创建新租户是非常罕见的。我们每天不会创建太多租户,我仍然可以在晚上运行批处理来手动创建模式。但是,在尝试编写代码之前,有一个问题是,在手动创建模式之后,我是否必须重新启动应用程序?谢谢。我不知道,我对SQL模式和Hibernate没有太多经验。我想这会管用,但最好的办法就是试试:)顺便说一句,你有模式策略的工作配置吗?我已经醒了30个小时了,所以我现在要崩溃了。当我实施它时,我会通知你;)棺材