Spring-Data JPA with Multi-Tenancy Hibernate

痞子三分冷 提交于 2019-11-30 10:04:13

Use CurrentTenantIdentifierResolver:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="hibernateProperties">
        <map>
            <entry key="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect">
            <entry key="hibernate.format_sql" value="true">
            <entry key="hibernate.multi_tenant_connection_provider" value="com.company.hibernate.MultiTenantConnectionProviderImpl">
            <entry key="hibernate.multiTenancy" value="DATABASE">
            <!-- tenant resolver as spring bean -->
            <entry key="hibernate.tenant_identifier_resolver" value-ref="currentTenantIdentifierResolver"/>
        </map>
    </property>
</bean>

<bean id="currentTenantIdentifierResolver"
    class="com.xxx.CurrentTenantResolver">
</bean>

Simple tenant identifier resolver would be like this:

public class CurrentTenantResolver implements CurrentTenantIdentifierResolver {

    public String resolveCurrentTenantIdentifier() {
        // retrieve tenant from logged in user
        User usr = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ;       
        return usr.getTenantName();

    }

    public boolean validateExistingCurrentSessions() {
        return true;
    }

}

Remember the above class is a spring bean, so you can autowired any spring bean(service/dao) just like regular spring bean.

Every time spring need session hibernate will retrieve the tenant identifier from that bean.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!