{"record":{"id":"c97be84e46b62be3","repo":"quarkusio/quarkus","slug":"no-name-provided-and-multiple-persistence-units-fo-c97be8","errorCode":null,"errorMessage":"No name provided and multiple persistence units found","messagePattern":"No name provided and multiple persistence units found","errorType":"exception","errorClass":"PersistenceException","httpStatus":null,"severity":"error","filePath":"extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java","lineNumber":157,"sourceCode":"            Map properties) {\n        log.tracef(\"Attempting to obtain correct EntityManagerFactoryBuilder for persistenceUnitName : %s\",\n                persistenceUnitName);\n\n        verifyProperties(properties);\n\n        // These are pre-parsed during image generation:\n        // Processing only the reactive descriptors\n        final List<QuarkusPersistenceUnitDescriptor> units = PersistenceUnitsHolder.getPersistenceUnitDescriptors()\n                .stream()\n                .filter(d -> d.isReactive())\n                .toList();\n\n        log.debugf(\"Located %s persistence units; checking each\", units.size());\n\n        if (persistenceUnitName == null && units.size() > 1) {\n            // no persistence-unit name to look for was given and we found multiple\n            // persistence-units\n            throw new PersistenceException(\"No name provided and multiple persistence units found\");\n        }\n\n        for (QuarkusPersistenceUnitDescriptor persistenceUnit : units) {\n            log.debugf(\n                    \"Checking persistence-unit [name=%s, explicit-provider=%s] against incoming persistence unit name [%s]\",\n                    persistenceUnit.getName(), persistenceUnit.getProviderClassName(), persistenceUnitName);\n\n            final boolean matches = persistenceUnitName == null\n                    || persistenceUnit.getName().equals(persistenceUnitName);\n            if (!matches) {\n                log.debugf(\"Excluding from consideration '%s' due to name mismatch\", persistenceUnit.getName());\n                continue;\n            }\n\n            // See if we (Hibernate) are the persistence provider\n            if (!isProvider(persistenceUnit)) {\n                log.debug(\"Excluding from consideration due to provider mismatch\");\n                continue;","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java#L139-L175","documentation":"FastBootHibernateReactivePersistenceProvider.locateEntityManagerFactoryBuilder resolves persistence unit descriptors. When createEntityManagerFactory is called without a persistence unit name and more than one persistence unit is registered, the selection is ambiguous, so a PersistenceException is thrown.","triggerScenarios":"Calling Persistence.createEntityManagerFactory() (or Hibernate's bootstrap) with null name while the app defines 2+ persistence units (multiple named PUs configured via quarkus.hibernate-orm.\"name\".*); detected in getEntityManagerFactoryBuilderOrNull.","commonSituations":"Adding a second persistence unit and existing code still calls createEntityManagerFactory with no arguments; library code bootstrapping EMFs without a name; porting a multi-PU Spring/SE app to Quarkus Hibernate Reactive.","solutions":["Pass the persistence unit name explicitly: Persistence.createEntityManagerFactory(\"<pu-name>\")","Use Quarkus injection (inject EntityManagerFactory / Mutiny.SessionFactory) instead of manual bootstrap","Reduce to a single persistence unit if only one is needed","Check quarkus.hibernate-orm.* config to confirm the exact PU names"],"exampleFix":"// before\nEntityManagerFactory emf = Persistence.createEntityManagerFactory(null); // ambiguous\n\n// after\nEntityManagerFactory emf = Persistence.createEntityManagerFactory(\"customers\");","handlingStrategy":"type-guard","validationCode":"long puCount = configuredPersistenceUnits().size();\nboolean nameRequired = puCount > 1;\nif (nameRequired && puName == null) throw new IllegalArgumentException(\"PU name required\");","typeGuard":"boolean unambiguousBootstrap(String puName, int unitCount) {\n    return puName != null || unitCount == 1;\n}","tryCatchPattern":"try {\n    emf = Persistence.createEntityManagerFactory(puName);\n} catch (PersistenceException e) {\n    if (e.getMessage().contains(\"multiple persistence units\")) { puName = pickDefaultPu(); }\n    throw e;\n}","preventionTips":["Always pass an explicit persistence unit name when more than one PU exists","Prefer CDI injection of EntityManagerFactory/SessionFactory over Persistence bootstrap","List configured PUs (quarkus.hibernate-orm.* keys) before refactoring"],"tags":["hibernate-reactive","persistence-unit","ambiguity"],"backgroundTag":"ambiguous-persistence-unit","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}