3636import io .quarkus .hibernate .orm .runtime .config .DatabaseOrmCompatibilityVersion ;
3737import io .quarkus .hibernate .orm .runtime .integration .HibernateOrmIntegrationRuntimeDescriptor ;
3838import io .quarkus .hibernate .orm .runtime .integration .HibernateOrmIntegrationRuntimeInitListener ;
39+ import io .quarkus .hibernate .orm .runtime .migration .MultiTenancyStrategy ;
3940import io .quarkus .hibernate .orm .runtime .recording .PrevalidatedQuarkusMetadata ;
4041import io .quarkus .hibernate .orm .runtime .recording .RecordedState ;
4142
@@ -222,7 +223,8 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde
222223 Optional <String > dataSourceName = recordedState .getBuildTimeSettings ().getSource ().getDataSource ();
223224 if (dataSourceName .isPresent ()) {
224225 // Inject the datasource
225- injectDataSource (persistenceUnitName , dataSourceName .get (), runtimeSettingsBuilder );
226+ injectDataSource (persistenceUnitName , dataSourceName .get (), recordedState .getMultiTenancyStrategy (),
227+ runtimeSettingsBuilder );
226228 }
227229
228230 // Inject runtime configuration if the persistence unit was defined by Quarkus configuration
@@ -397,8 +399,10 @@ private void verifyProperties(Map properties) {
397399 }
398400
399401 private static void injectDataSource (String persistenceUnitName , String dataSourceName ,
402+ MultiTenancyStrategy multiTenancyStrategy ,
400403 RuntimeSettings .Builder runtimeSettingsBuilder ) {
401- // first convert
404+ // Note: the counterpart of this code, but for multitenancy (injecting the connection provider),
405+ // can be found in io.quarkus.hibernate.orm.runtime.boot.FastBootMetadataBuilder.mergeSettings
402406
403407 if (runtimeSettingsBuilder .isConfigured (AvailableSettings .URL ) ||
404408 runtimeSettingsBuilder .isConfigured (AvailableSettings .DATASOURCE ) ||
@@ -410,6 +414,16 @@ private static void injectDataSource(String persistenceUnitName, String dataSour
410414 return ;
411415 }
412416
417+ if (multiTenancyStrategy != null && multiTenancyStrategy != MultiTenancyStrategy .NONE
418+ && multiTenancyStrategy != MultiTenancyStrategy .DISCRIMINATOR ) {
419+ // Nothing to do: the datasource retrieval will be handled dynamically
420+ // by an implementation of TenantConnectionResolver -- for instance
421+ // io.quarkus.hibernate.orm.runtime.tenant.DataSourceTenantConnectionResolver.
422+ // In the case of database multi-tenancy, that connection resolver
423+ // might not even use the assigned datasource.
424+ return ;
425+ }
426+
413427 DataSource dataSource ;
414428 try {
415429 // ClientProxy.unwrap is necessary to trigger exceptions on inactive datasources
0 commit comments