1111import java .io .Serial ;
1212import java .sql .Connection ;
1313import java .util .ArrayList ;
14+ import java .util .Collection ;
1415import java .util .HashMap ;
1516import java .util .HashSet ;
1617import java .util .List ;
9394import org .hibernate .metamodel .spi .RuntimeMetamodelsImplementor ;
9495import org .hibernate .metamodel .spi .RuntimeModelCreationContext ;
9596import org .hibernate .proxy .EntityNotFoundDelegate ;
96- import org .hibernate .proxy .LazyInitializer ;
9797import org .hibernate .query .internal .QueryEngineImpl ;
9898import org .hibernate .query .named .NamedObjectRepository ;
9999import org .hibernate .query .spi .QueryEngine ;
@@ -192,7 +192,7 @@ public class SessionFactoryImpl implements SessionFactoryImplementor {
192192 private final transient CurrentSessionContext currentSessionContext ;
193193
194194 private final transient Map <String , FilterDefinition > filters ;
195- private final transient java . util . Collection <FilterDefinition > autoEnabledFilters = new HashSet <>();
195+ private final transient Collection <FilterDefinition > autoEnabledFilters = new ArrayList <>();
196196 private final transient JavaType <Object > tenantIdentifierJavaType ;
197197
198198 private final transient EventListenerGroups eventListenerGroups ;
@@ -251,19 +251,11 @@ public SessionFactoryImpl(
251251
252252 filters = new HashMap <>( bootMetamodel .getFilterDefinitions () );
253253
254- final var tenantFilter = filters .get ( TenantIdBinder .FILTER_NAME );
255- if ( tenantFilter == null ) {
256- tenantIdentifierJavaType = options .getDefaultTenantIdentifierJavaType ();
257- }
258- else {
259- final var jdbcMapping = tenantFilter .getParameterJdbcMapping ( TenantIdBinder .PARAMETER_NAME );
260- assert jdbcMapping != null ;
261- //noinspection unchecked
262- tenantIdentifierJavaType = jdbcMapping .getJavaTypeDescriptor ();
263- }
264- for ( var filterEntry : filters .entrySet () ) {
265- if ( filterEntry .getValue ().isAutoEnabled () ) {
266- autoEnabledFilters .add ( filterEntry .getValue () );
254+ tenantIdentifierJavaType = tenantIdentifierType ( options );
255+
256+ for ( var filter : filters .values () ) {
257+ if ( filter .isAutoEnabled () ) {
258+ autoEnabledFilters .add ( filter );
267259 }
268260 }
269261
@@ -357,6 +349,19 @@ public SessionFactoryImpl(
357349 }
358350 }
359351
352+ private JavaType <Object > tenantIdentifierType (SessionFactoryOptions options ) {
353+ final var tenantFilter = filters .get ( TenantIdBinder .FILTER_NAME );
354+ if ( tenantFilter == null ) {
355+ return options .getDefaultTenantIdentifierJavaType ();
356+ }
357+ else {
358+ final var jdbcMapping = tenantFilter .getParameterJdbcMapping ( TenantIdBinder .PARAMETER_NAME );
359+ assert jdbcMapping != null ;
360+ //noinspection unchecked
361+ return jdbcMapping .getJavaTypeDescriptor ();
362+ }
363+ }
364+
360365 private EventMonitor loadEventMonitor () {
361366 final var eventMonitors = classLoaderService .loadJavaServices ( EventMonitor .class );
362367 return eventMonitors .isEmpty () ? new EmptyEventMonitor () : eventMonitors .iterator ().next ();
@@ -642,36 +647,33 @@ public Session createEntityManager() {
642647 return buildEntityManager ( SYNCHRONIZED , null );
643648 }
644649
645- private < K , V > Session buildEntityManager (final SynchronizationType synchronizationType , final Map <K , V > map ) {
650+ private Session buildEntityManager (SynchronizationType synchronizationType , Map <?,? > map ) {
646651 assert status != Status .CLOSED ;
647652
648- SessionBuilderImplementor builder = withOptions ();
653+ var builder = withOptions ();
649654 builder .autoJoinTransactions ( synchronizationType == SYNCHRONIZED );
650655
651656 if ( map != null ) {
652- //noinspection SuspiciousMethodCalls
653657 final Object tenantIdHint = map .get ( HINT_TENANT_ID );
654658 if ( tenantIdHint != null ) {
655- builder = ( SessionBuilderImplementor ) builder .tenantIdentifier ( tenantIdHint );
659+ builder = builder .tenantIdentifier ( tenantIdHint );
656660 }
657661 }
658662
659- final Session session = builder .openSession ();
663+ final var session = builder .openSession ();
660664 if ( map != null ) {
661- for ( Map .Entry <K , V > o : map .entrySet () ) {
662- final K key = o .getKey ();
663- if ( key instanceof String string ) {
665+ for ( var entry : map .entrySet () ) {
666+ if ( entry .getKey () instanceof String string ) {
664667 if ( !HINT_TENANT_ID .equals ( string ) ) {
665- session .setProperty ( string , o .getValue () );
668+ session .setProperty ( string , entry .getValue () );
666669 }
667670 }
668671 }
669672 }
670673 return session ;
671674 }
672675
673- @ Override @ SuppressWarnings ("unchecked" )
674- public Session createEntityManager (Map map ) {
676+ public Session createEntityManager (Map <?,?> map ) {
675677 validateNotClosed ();
676678 return buildEntityManager ( SYNCHRONIZED , map );
677679 }
@@ -695,8 +697,8 @@ private void errorIfResourceLocalDueToExplicitSynchronizationType() {
695697 }
696698 }
697699
698- @ Override @ SuppressWarnings ( "unchecked" )
699- public Session createEntityManager (SynchronizationType synchronizationType , Map map ) {
700+ @ Override
701+ public Session createEntityManager (SynchronizationType synchronizationType , Map <?,?> map ) {
700702 validateNotClosed ();
701703 errorIfResourceLocalDueToExplicitSynchronizationType ();
702704 return buildEntityManager ( synchronizationType , map );
@@ -737,7 +739,7 @@ public RootGraphImplementor<?> findEntityGraphByName(String name) {
737739
738740 @ Override
739741 public String bestGuessEntityName (Object object ) {
740- final LazyInitializer initializer = extractLazyInitializer ( object );
742+ final var initializer = extractLazyInitializer ( object );
741743 if ( initializer != null ) {
742744 // it is possible for this method to be called during flush processing,
743745 // so make certain that we do not accidentally initialize an uninitialized proxy
@@ -803,8 +805,8 @@ public void close() {
803805 LOG .closingFactory ( getUuid () );
804806 observer .sessionFactoryClosing ( this );
805807
806- // NOTE : the null checks below handle cases where close is called from
807- // a failed attempt to create the SessionFactory
808+ // NOTE: the null checks below handle cases where close is called
809+ // from a failed attempt to create the SessionFactory
808810
809811 if ( cacheAccess != null ) {
810812 cacheAccess .close ();
@@ -962,7 +964,7 @@ public FilterDefinition getFilterDefinition(String filterName) {
962964 }
963965
964966 @ Override
965- public java . util . Collection <FilterDefinition > getAutoEnabledFilters () {
967+ public Collection <FilterDefinition > getAutoEnabledFilters () {
966968 return autoEnabledFilters ;
967969 }
968970
@@ -1072,10 +1074,10 @@ public static Interceptor configuredInterceptor(Interceptor interceptor, Session
10721074 }
10731075
10741076 public static Interceptor configuredInterceptor (Interceptor interceptor , boolean explicitNoInterceptor , SessionFactoryOptions options ) {
1075- // NOTE : DO NOT return EmptyInterceptor.INSTANCE from here as a "default for the Session"
1076- // we "filter" that one out here. The return from here should represent the
1077- // explicitly configured Interceptor (if one). Return null from here instead; Session
1078- // will handle it
1077+ // NOTE: DO NOT return EmptyInterceptor.INSTANCE from here as a "default for the Session"
1078+ // we "filter" that one out here. The return from here should represent the
1079+ // explicitly configured Interceptor (if one). Return null from here instead;
1080+ // Session will handle it
10791081
10801082 if ( interceptor != null && interceptor != EmptyInterceptor .INSTANCE ) {
10811083 return interceptor ;
@@ -1087,7 +1089,7 @@ public static Interceptor configuredInterceptor(Interceptor interceptor, boolean
10871089 return optionsInterceptor ;
10881090 }
10891091
1090- // If explicitly asking for no interceptor and there is no SessionFactory-scoped interceptors , then
1092+ // If explicitly asking for no interceptor and there is no SessionFactory-scoped interceptor , then
10911093 // no need to inherit from the configured stateless session ones.
10921094 if ( explicitNoInterceptor ) {
10931095 return null ;
@@ -1349,7 +1351,7 @@ public SessionBuilderImpl eventListeners(SessionEventListener... listeners) {
13491351 public SessionBuilderImpl clearEventListeners () {
13501352 if ( listeners == null ) {
13511353 //Needs to initialize explicitly to an empty list as otherwise "null" implies the default listeners will be applied
1352- this . listeners = new ArrayList <>( 3 );
1354+ listeners = new ArrayList <>( 3 );
13531355 }
13541356 else {
13551357 listeners .clear ();
0 commit comments