{"record":{"id":"5c3ed57443c623a3","repo":"quarkusio/quarkus","slug":"datasource-must-be-defined-for-persistence-unit","errorCode":null,"errorMessage":"Datasource must be defined for persistence unit '%s'. Setting the datasource for the persistence unit can be done via the '%s' property.  Refer to https://quarkus.io/guides/datasource for guidance.","messagePattern":"Datasource must be defined for persistence unit '(.+?)'\\. Setting the datasource for the persistence unit can be done via the '(.+?)' property\\.  Refer to https://quarkus\\.io/guides/datasource for guidance\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java","lineNumber":1202,"sourceCode":"                        isHibernateValidatorPresent(capabilities)));\n    }\n\n    private static Optional<DatabaseKind.SupportedDatabaseKind> collectDialectConfig(String persistenceUnitName,\n            HibernateOrmConfigPersistenceUnit persistenceUnitConfig,\n            List<DatabaseKindDialectBuildItem> dbKindMetadataBuildItems,\n            Optional<JdbcDataSourceBuildItem> jdbcDataSource,\n            MultiTenancyStrategy multiTenancyStrategy,\n            Optional<String> dialect,\n            BuildProducer<ReflectiveMethodBuildItem> reflectiveMethods,\n            BiConsumer<String, String> puPropertiesCollector) {\n        final HibernateOrmConfigPersistenceUnit.HibernateOrmConfigPersistenceUnitDialect dialectConfig = persistenceUnitConfig\n                .dialect();\n\n        Optional<String> dbKind = jdbcDataSource.map(JdbcDataSourceBuildItem::getDbKind);\n        Optional<String> dbVersion = jdbcDataSource.flatMap(JdbcDataSourceBuildItem::getDbVersion);\n        if (multiTenancyStrategy != MultiTenancyStrategy.DATABASE && jdbcDataSource.isEmpty()) {\n            String dsConfigProperty = HibernateOrmRuntimeConfig.puPropertyKey(persistenceUnitName, \"datasource\");\n            throw new ConfigurationException(String.format(Locale.ROOT,\n                    \"Datasource must be defined for persistence unit '%s'. Setting the datasource for the persistence unit can be done via the '%s' property. \"\n                            + \" Refer to https://quarkus.io/guides/datasource for guidance.\",\n                    persistenceUnitName, dsConfigProperty),\n                    new HashSet<>(Arrays.asList(\"quarkus.datasource.db-kind\", \"quarkus.datasource.username\",\n                            \"quarkus.datasource.password\", \"quarkus.datasource.jdbc.url\")));\n        }\n\n        Optional<DatabaseKind.SupportedDatabaseKind> supportedDatabaseKind = setDialectAndStorageEngine(\n                persistenceUnitName,\n                dbKind,\n                dialect,\n                dbVersion,\n                dialectConfig,\n                dbKindMetadataBuildItems,\n                puPropertiesCollector);\n\n        if ((dbKind.isPresent() && DatabaseKind.isPostgreSQL(dbKind.get())\n                || (dialect.isPresent() && dialect.get().toLowerCase(Locale.ROOT).contains(\"postgres\")))) {","sourceCodeStart":1184,"sourceCodeEnd":1220,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java#L1184-L1220","documentation":"Each persistence unit needs a datasource. When multi-tenancy is not DATABASE and no JdbcDataSourceBuildItem was found for the persistence unit, HibernateOrmProcessor throws a ConfigurationException telling you which property (quarkus.hibernate-orm.\"<pu>\".datasource or the default PU equivalent) to set, and marks the required datasource config properties.","triggerScenarios":"Building a persistence unit whose multiTenancyStrategy != DATABASE while no JDBC datasource build item exists, i.e. quarkus.datasource.* is not configured or quarkus.hibernate-orm.datasource is unset/points to a missing datasource.","commonSituations":"Forgetting to add the quarkus-jdbc-* driver extension and datasource config; typo in the datasource name referenced by the PU; new PU added for a second database with no datasource defined.","solutions":["Define a datasource in application.properties (quarkus.datasource.db-kind, username, password, jdbc.url) or the PU-specific quarkus.hibernate-orm.\"<pu>\".datasource","Add the matching JDBC driver extension (e.g. quarkus-jdbc-postgresql)","Fix a misspelled datasource name in the PU configuration"],"exampleFix":"// application.properties\n// before\nquarkus.hibernate-orm.datasource.name=missing-ds\n// after\nquarkus.datasource.db-kind=postgresql\nquarkus.datasource.username=app\nquarkus.datasource.password=secret\nquarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/appdb","handlingStrategy":"validation","validationCode":"// application.properties must define, for PU '<pu>':\n// quarkus.hibernate-orm.\"<pu>\".datasource=<ds> and quarkus.datasource.\"<ds>\".* settings\nassertNotBlank(prop(\"quarkus.datasource.jdbc.url\"), \"Datasource must be defined before build\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always configure quarkus.datasource.db-kind and jdbc.url when using Hibernate ORM","Add the JDBC driver extension (quarkus-jdbc-*) for your database","When adding a second persistence unit, define and reference its datasource explicitly"],"tags":["datasource","hibernate-orm","configuration","jdbc"],"backgroundTag":"missing-datasource-configuration","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"}