{"record":{"id":"363acd1a4b6d1d0b","repo":"hibernate/hibernate-orm","slug":"no-current-schema-syntax-supported-by-getclas","errorCode":null,"errorMessage":"\"No current schema syntax supported by \" + getClass().getName()","messagePattern":"\"No current schema syntax supported by \" \\+ getClass\\(\\)\\.getName\\(\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java","lineNumber":1198,"sourceCode":"\tpublic boolean canCreateSchema() {\n\t\treturn false;\n\t}\n\n\t@Override\n\tpublic String[] getCreateSchemaCommand(String schemaName) {\n\t\tthrow new UnsupportedOperationException(\n\t\t\t\t\"No create schema syntax supported by \" + getClass().getName() );\n\t}\n\n\t@Override\n\tpublic String[] getDropSchemaCommand(String schemaName) {\n\t\tthrow new UnsupportedOperationException(\n\t\t\t\t\"No drop schema syntax supported by \" + getClass().getName() );\n\t}\n\n\t@Override\n\tpublic String getCurrentSchemaCommand() {\n\t\tthrow new UnsupportedOperationException(\n\t\t\t\t\"No current schema syntax supported by \" + getClass().getName() );\n\t}\n\n\t@Override\n\tpublic SchemaNameResolver getSchemaNameResolver() {\n\t\t// Spanner does not have a notion of database name schemas, so return \"\".\n\t\treturn (connection, dialect) -> \"\";\n\t}\n\n\t@Override\n\tpublic boolean qualifyIndexName() {\n\t\treturn false;\n\t}\n\n\t@Override\n\tpublic String getAddPrimaryKeyConstraintString(String constraintName) {\n\t\tthrow new UnsupportedOperationException( \"Cannot add primary key constraint in Cloud Spanner.\" );\n\t}","sourceCodeStart":1180,"sourceCodeEnd":1216,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java#L1180-L1216","documentation":"SpannerDialect.getCurrentSchemaCommand() unconditionally throws UnsupportedOperationException because Cloud Spanner has no 'current schema' query (no INFORMATION_SCHEMA-based SELECT for the current namespace, no DATABASE() equivalent acceptable here). Hibernate calls it when schema tooling or session code needs to resolve the current schema — note the companion getSchemaNameResolver() returns a resolver that yields \"\" instead. Hitting it usually means some component bypassed the resolver and directly asked the dialect for the current-schema SQL.","triggerScenarios":"Code that calls dialect.getCurrentSchemaCommand() directly (e.g. custom SchemaMigrator/GroupSchemaNameResolver implementations, or tooling that executes the returned SQL), or Hibernate schema-management paths that request current-schema DDL while operating against SpannerDialect instead of using getSchemaNameResolver().","commonSituations":"Custom migration utilities written against other dialects (PostgreSQL `select current_schema()`) reused on Spanner; multi-tenant connection providers that switch and verify schemas per tenant; older Hibernate tooling versions that queried current schema during export.","solutions":["Use dialect.getSchemaNameResolver() instead — SpannerDialect supplies one that returns the empty string, so no SQL is issued.","Treat the Spanner database as the only namespace: drop per-schema switching logic and key isolation off the database/connection URL.","Branch custom tooling on dialect capability (e.g. `dialect instanceof SpannerDialect`) and skip current-schema resolution for Spanner.","If a value is required for logging, hardcode \"\" to match the dialect's resolver."],"exampleFix":"// before\nString sql = dialect.getCurrentSchemaCommand()[0];\nString schema = jdbcTemplate.queryForObject(sql, String.class);\n\n// after\nSchemaNameResolver resolver = dialect.getSchemaNameResolver();\nString schema = resolver.resolveSchemaName(connection, dialect); // \"\" on Spanner","handlingStrategy":"fallback","validationCode":"if (dialect instanceof SpannerDialect) {\n  currentSchema = \"\"; // Spanner has no schemas; resolver returns \"\"\n} else {\n  currentSchema = dialect.getSchemaNameResolver().resolveSchemaName(conn, dialect);\n}","typeGuard":null,"tryCatchPattern":"try {\n  sql = dialect.getCurrentSchemaCommand()[0];\n} catch (UnsupportedOperationException e) {\n  currentSchema = \"\"; // acceptable fallback: matches SpannerDialect's own resolver\n}","preventionTips":["Always use dialect.getSchemaNameResolver() instead of getCurrentSchemaCommand().","Treat the database as the namespace unit on Spanner.","Branch schema-resolution utilities on dialect capability."],"tags":["hibernate","cloud-spanner","dialect","schema","unsupportedoperationexception"],"backgroundTag":"schema-management-unsupported","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}