我目前正在尝试使用单独的Schema aproach为多租户设置Hibernate.
在完成了大约2天的工作并浏览了几乎所有我可以通过Google找到的来源后,我开始变得非常沮丧.
Basicaly我试图遵循Hibernate devguide http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/#d5e4691中提供的指南
但不幸的是我无法找到ConnectionProviderUtils到构建ConnectionProvider.目前我想弄清楚2点:
为什么永远不会调用我的MSSQLMultiTenantConnectionProvider的configure(Properties props)方法.根据我从不同的其他ConnectionProvider实现的来源和描述中解释,我假设将调用此方法来初始化ConnectionProvider.
由于我无法使用configure(属性道具),我尝试了以某种方式获取应用程序Context和hibernate.cfg.xml中指定的hibernate属性和DataSource的其他方法.(就像将数据源直接注入ConnectionProvider一样)
任何可能的解决方法的指针(方法,类,教程)
以下是我的实现的相关部分:
Data Source和Hibernate.cfg.xml:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://<host>:<port>;databaseName=<DbName>;" />
<property name="username" value=<username> />
<property name="password" value=<password> />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- property name="dataSource" ref="dataSource" /-->
<property name="annotatedClasses">
<list>
<value>c.h.utils.hibernate.User</value>
<value>c.h.utils.hibernate.Role</value>
<value>c.h.utils.hibernate.Tenant</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.show_sql=true
hibernate.multiTenancy=SCHEMA
hibernate.tenant_identifier_resolver=c.h.utils.hibernate.CurrentTenantIdentifierResolver
hibernate.multi_tenant_connection_provider=c.h.utils.hibernate.MSSQLMultiTenantConnectionProviderImpl
</value>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
MSSQLMultiTenantConnectionProviderImpl:
package c.hoell.utils.hibernate;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
import org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider;
import org.springframework.beans.factory.annotation.Autowired;
import …
Run Code Online (Sandbox Code Playgroud)