{"record":{"id":"c32c29da3a2a4fde","repo":"hibernate/hibernate-orm","slug":"unsupported-specification-specification","errorCode":null,"errorMessage":"Unsupported specification: {specification}","messagePattern":"Unsupported specification: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"info","filePath":"hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLServerLegacyDialect.java","lineNumber":561,"sourceCode":"\n\t@Override\n\tpublic String trimPattern(TrimSpec specification, boolean isWhitespace) {\n\t\tif ( getVersion().isSameOrAfter( 16 ) ) {\n\t\t\tswitch ( specification ) {\n\t\t\t\tcase BOTH:\n\t\t\t\t\treturn isWhitespace\n\t\t\t\t\t\t\t? \"trim(?1)\"\n\t\t\t\t\t\t\t: \"trim(?2 from ?1)\";\n\t\t\t\tcase LEADING:\n\t\t\t\t\treturn isWhitespace\n\t\t\t\t\t\t\t? \"ltrim(?1)\"\n\t\t\t\t\t\t\t: \"ltrim(?1,?2)\";\n\t\t\t\tcase TRAILING:\n\t\t\t\t\treturn isWhitespace\n\t\t\t\t\t\t\t? \"rtrim(?1)\"\n\t\t\t\t\t\t\t: \"rtrim(?1,?2)\";\n\t\t\t}\n\t\t\tthrow new UnsupportedOperationException( \"Unsupported specification: \" + specification );\n\t\t}\n\t\treturn super.trimPattern( specification, isWhitespace );\n\t}\n\n\t@Override\n\tpublic SqlAstTranslatorFactory getSqlAstTranslatorFactory() {\n\t\treturn new StandardSqlAstTranslatorFactory() {\n\t\t\t@Override\n\t\t\tprotected <T extends JdbcOperation> SqlAstTranslator<T> buildTranslator(\n\t\t\t\t\tSessionFactoryImplementor sessionFactory, Statement statement) {\n\t\t\t\treturn new SQLServerLegacySqlAstTranslator<>( sessionFactory, statement );\n\t\t\t}\n\t\t};\n\t}\n\n\t@Override\n\tpublic AggregateSupport getAggregateSupport() {\n\t\treturn SQLServerAggregateSupport.valueOf( this );","sourceCodeStart":543,"sourceCodeEnd":579,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLServerLegacyDialect.java#L543-L579","documentation":"SQLServerLegacyDialect.trimPattern() renders trim patterns for SQL Server 2022+ (dialect version >= 16, which added trim/ltrim/rtrim with a characters argument). The switch covers all three TrimSpec constants (BOTH, LEADING, TRAILING), so the 'Unsupported specification' throw is a defensive dead branch: it can only fire if the TrimSpec enum ever gains a new constant or a subclass invokes trimPattern with an out-of-enum value. It is not reachable through the public HQL/Criteria API today.","triggerScenarios":"Not reachable from application code with current Hibernate versions: HQL trim()/ltrim()/rtrim() with leading/trailing/both all map to handled cases. Would only surface after a future Hibernate version adds a new TrimSpec constant while running against a stale hibernate-community-dialects build.","commonSituations":"Version skew between hibernate-orm and hibernate-community-dialects after a partial upgrade.","solutions":["No application change needed; if it ever appears, align the hibernate-community-dialects version with the hibernate-orm version","Keep HQL trim usage to leading/trailing/both specifications","Report it as a dialect bug in the Hibernate tracker if genuinely reached"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if ( specification == TrimSpec.LEADING\n        || specification == TrimSpec.TRAILING\n        || specification == TrimSpec.BOTH ) {\n    // safe: SQLServerLegacyDialect.trimPattern handles all three on 2022+\n    String pattern = dialect.trimPattern( specification, isWhitespace );\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep hibernate-community-dialects and hibernate-orm versions in lockstep","Call dialect.trimPattern() only with the three standard TrimSpec values","Treat this exception as a version-skew signal if it ever appears"],"tags":["sqlserver","trim","dead-code","versioning"],"backgroundTag":"unsupported-trim-specification","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}