Closed
Description
Yanming Zhou opened SPR-14476 and commented
Spring should check if
CurrentTenantIdentifierResolver exists when open session.
HibernateTransactionManager:
SessionBuilder builder = getSessionFactory().withOptions();
CurrentTenantIdentifierResolver resolver = ((SessionFactoryImplementor)getSessionFactory()).getCurrentTenantIdentifierResolver();
if ( resolver != null ) {
builder.tenantIdentifier( resolver.resolveCurrentTenantIdentifier() );
}
Interceptor entityInterceptor = getEntityInterceptor();
if ( entityInterceptor != null ) {
builder.interceptor( entityInterceptor );
}
Session newSession = builder.openSession();
And other place like OpenSessionInViewFilter should fix also.
BTW: Hibernate has a bug itself, hibernate/hibernate-orm#1483 , Spring can make workaround by override method in LocalSessionFactoryBean
@Override
public void setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver currentTenantIdentifierResolver) {
getHibernateProperties().put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER,
currentTenantIdentifierResolver);
super.setCurrentTenantIdentifierResolver(currentTenantIdentifierResolver);
}
Affects: 4.3.1
Issue Links:
- Add setMultiTenantConnectionProvider to org.springframework.orm.hibernate5.LocalSessionFactoryBean [SPR-14072] #18644 Add setMultiTenantConnectionProvider to org.springframework.orm.hibernate5.LocalSessionFactoryBean