使用Hibernate 4.1.12开发多租户Java Web应用程序时,我们发现两种配置模式似乎有效,一种具有Hibernate多租户功能,一种没有。
hibernate.cfg.xml 看起来像;
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Standard configuration -->
<property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.connection.autocommit">true</property><!-- legacy non-transactional DB -->
<!-- HERE LIES THE MULTITENANCY CONFIGURATION -->
<!-- Persistent classes -->
<mapping class="com.foo.model.Bar1"/>
<mapping class="com.foo.model.Bar2"/>
<!-- Other entities here -->
</session-factory>
多租户配置&#34;具有Hibernate多租户功能&#34;是:
<!-- Multitenancy configuration (with Hibernate multitenancy support) -->
<property name="hibernate.multiTenancy">DATABASE</property>
<property name="hibernate.tenant_identifier_resolver">com.foo.hibernate.TenantResolverImpl</property>
<property name="hibernate.multi_tenant_connection_provider">com.foo.hibernate.MultiTenantConnectionProviderImpl</property>
<property name="hibernate.current_session_context_class">com.foo.hibernate.CurrentSessionContextImpl</property>
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
多租户配置&#34;没有Hibernates多租户功能&#34;是:
<!-- Multitenancy configuration (without Hibernate multitenancy suport, only home made multitenancy) -->
<property name="hibernate.connection.provider_class">com.foo.hibernate.ConnectionProviderImpl</property>
<property name="hibernate.current_session_context_class">com.foo.hibernate.CurrentSessionContextImpl</property>
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
一些实施细节:
到目前为止,两者都运作良好。
问题是:这两种模式之间有什么区别?
感谢您的时间。
答案 0 :(得分:1)
最好使用带有hibernate.multiTenancy
的显式表单,它会进行一些额外的健全性检查,并且在未来新服务/组件涉及多租户时更具未来性。
但你明确地做的是hibernate.multiTenancy的主要内容。它适用于您的情况,因为您已基本决定实现自己的连接提供程序,禁用JDBC元数据检查并且不使用模式生成功能(在&#34;非显式多租户&#34;配置中)。