{"record":{"id":"68502e1f27ef7e94","repo":"hibernate/hibernate-orm","slug":"tenant-identifier-required","errorCode":null,"errorMessage":"Tenant identifier required","messagePattern":"Tenant identifier required","errorType":"exception","errorClass":"HibernateException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/internal/ContextualJdbcConnectionAccess.java","lineNumber":44,"sourceCode":"\n\n\tContextualJdbcConnectionAccess(\n\t\t\tObject tenantIdentifier,\n\t\t\tboolean readOnly,\n\t\t\tSessionEventListener listener,\n\t\t\tMultiTenantConnectionProvider<Object> connectionProvider,\n\t\t\tSharedSessionContractImplementor session) {\n\t\tthis.tenantIdentifier = tenantIdentifier;\n\t\tthis.readOnly = readOnly;\n\t\tthis.listener = listener;\n\t\tthis.connectionProvider = connectionProvider;\n\t\tthis.session = session;\n\t}\n\n\t@Override\n\tpublic Connection obtainConnection() throws SQLException {\n\t\tif ( tenantIdentifier == null ) {\n\t\t\tthrow new HibernateException( \"Tenant identifier required\" );\n\t\t}\n\n\t\tfinal var eventMonitor = session.getEventMonitor();\n\t\tfinal var connectionAcquisitionEvent = eventMonitor.beginJdbcConnectionAcquisitionEvent();\n\t\ttry {\n\t\t\tlistener.jdbcConnectionAcquisitionStart();\n\t\t\treturn readOnly\n\t\t\t\t\t? connectionProvider.getReadOnlyConnection( tenantIdentifier )\n\t\t\t\t\t: connectionProvider.getConnection( tenantIdentifier );\n\t\t}\n\t\tfinally {\n\t\t\teventMonitor.completeJdbcConnectionAcquisitionEvent( connectionAcquisitionEvent, session, tenantIdentifier );\n\t\t\tlistener.jdbcConnectionAcquisitionEnd();\n\t\t}\n\t}\n\n\t@Override\n\tpublic void releaseConnection(Connection connection) throws SQLException {","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/internal/ContextualJdbcConnectionAccess.java#L26-L62","documentation":"Error \"Tenant identifier required\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown when multi-tenancy is configured but the required tenant identifier is missing or mismatched.","commonSituations":"Typical situations: opening a session without a tenant id on a multi-tenant factory; credentials-based multitenancy combined with read-only replicas.","solutions":["Provide the tenant identifier when opening the session (e.g. SessionBuilder.tenantIdentifier) in a multi-tenant setup."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}