Skip to content

Workaround for Hibernate bug: setCurrentTenantIdentifierResolver not respected [SPR-14476] #19045

Closed
@spring-projects-issues

Description

@spring-projects-issues

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:

Referenced from: commits 4e7e06f, 1670b4e

Metadata

Metadata

Assignees

Labels

in: dataIssues in data modules (jdbc, orm, oxm, tx)type: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions