{"record":{"id":"d574d4529d9d19ba","repo":"quarkusio/quarkus","slug":"initiatorlist-requires-for-hibernate-reactive-but","errorCode":null,"errorMessage":"InitiatorList requires for Hibernate Reactive but Hibernate Reactive extension is not around?","messagePattern":"InitiatorList requires for Hibernate Reactive but Hibernate Reactive extension is not around\\?","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/RecordableBootstrapFactory.java","lineNumber":31,"sourceCode":"import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;\nimport io.quarkus.hibernate.orm.runtime.service.InitialInitiatorListProvider;\nimport io.quarkus.hibernate.orm.runtime.service.StandardHibernateORMInitiatorListProvider;\n\nfinal class RecordableBootstrapFactory {\n\n    private static final InitialInitiatorListProvider reactiveInitiatorListProvider = initReactiveListProviderMaybe();\n    private static final InitialInitiatorListProvider classicInitiatorListProvider = new StandardHibernateORMInitiatorListProvider();\n\n    public static RecordableBootstrap createRecordableBootstrapBuilder(QuarkusPersistenceUnitDefinition puDefinition) {\n        final BootstrapServiceRegistry bsr = buildBootstrapServiceRegistry();\n        final RecordableBootstrap ssrBuilder = new RecordableBootstrap(bsr, getInitiatorListProvider(puDefinition));\n        return ssrBuilder;\n    }\n\n    private static InitialInitiatorListProvider getInitiatorListProvider(QuarkusPersistenceUnitDefinition puDefinition) {\n        if (puDefinition.isReactive()) {\n            if (reactiveInitiatorListProvider == null) {\n                throw new IllegalStateException(\n                        \"InitiatorList requires for Hibernate Reactive but Hibernate Reactive extension is not around?\");\n            }\n            return reactiveInitiatorListProvider;\n        } else {\n            return classicInitiatorListProvider;\n        }\n    }\n\n    private static BootstrapServiceRegistry buildBootstrapServiceRegistry() {\n        final ClassLoaderService providedClassLoaderService = FlatClassLoaderService.INSTANCE;\n        // N.B. support for custom IntegratorProvider injected via Properties (as\n        // instance) removed\n\n        final QuarkusIntegratorServiceImpl integratorService = new QuarkusIntegratorServiceImpl(providedClassLoaderService);\n        final StrategySelector strategySelector = QuarkusStrategySelectorBuilder.buildSelector(providedClassLoaderService);\n        return new BootstrapServiceRegistryImpl(true, providedClassLoaderService, strategySelector, integratorService);\n    }\n","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/RecordableBootstrapFactory.java#L13-L49","documentation":"RecordableBootstrapFactory chooses the service initiator list based on whether the persistence unit is reactive. If a PU is marked reactive but no Hibernate Reactive initiator-list provider was registered (the quarkus-hibernate-reactive extension is absent), boot fails with this IllegalStateException — the ORM extension alone cannot boot a reactive PU.","triggerScenarios":"A persistence unit is defined as reactive (isReactive() true, e.g. via quarkus.hibernate.orm... reactive-flavored definitions used by Hibernate Reactive) while the application has quarkus-hibernate-orm on the classpath but NOT quarkus-hibernate-reactive.","commonSituations":"Switching an app to Hibernate Reactive (reactive SQL clients, Panache Reactive) without adding the quarkus-hibernate-reactive dependency; a transitive configuration marking PUs reactive; leftover reactive PU config after removing the reactive extension.","solutions":["Add the quarkus-hibernate-reactive dependency to the application.","Or mark the persistence unit as non-reactive if blocking Hibernate ORM is intended.","Audit configuration/properties that set the PU reactive and remove them if the reactive extension is intentionally absent."],"exampleFix":"<!-- before (pom.xml) -->\n<dependency>io.quarkus:quarkus-hibernate-orm</dependency> <!-- PU is reactive, missing reactive ext -->\n<!-- after -->\n<dependency>io.quarkus:quarkus-hibernate-orm</dependency>\n<dependency>io.quarkus:quarkus-hibernate-reactive</dependency>","handlingStrategy":"validation","validationCode":"// Guard before marking a PU reactive\nif (puDefinition.isReactive() && !Class.forName(\"io.quarkus.hibernate.reactive.runtime.RecordableBootstrapFactory$ReactiveInitiatorListProvider\", false, getClass().getClassLoader()).desiredAssertionStatus()) {\n    // simpler: check dependency presence at build time\n}\n// Simplest check: ensure quarkus-hibernate-reactive is a dependency when any PU is reactive","typeGuard":null,"tryCatchPattern":"try {\n    bootPersistenceUnit();\n} catch (IllegalStateException e) {\n    if (e.getMessage().contains(\"Hibernate Reactive\")) {\n        log.error(\"Add io.quarkus:quarkus-hibernate-reactive or make the PU non-reactive\");\n    }\n}","preventionTips":["Add quarkus-hibernate-reactive whenever using reactive PUs","Keep reactive PU config in sync with installed extensions","After removing an extension, purge its PU configuration"],"tags":["hibernate-orm","hibernate-reactive","missing-extension","reactive"],"backgroundTag":"missing-extension-dependency","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}