{"record":{"id":"74cfac0c7f3b818f","repo":"hibernate/hibernate-orm","slug":"escape-character-literals-must-have-exactly-a-sing","errorCode":null,"errorMessage":"Escape character literals must have exactly a single character, but found: {}","messagePattern":"Escape character literals must have exactly a single character, but found: (.+?)","errorType":"exception","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java","lineNumber":3321,"sourceCode":"\t\t\t);\n\t\t}\n\t}\n\n\t@Override\n\tpublic Object visitLikeEscape(HqlParser.LikeEscapeContext ctx) {\n\t\tfinal var parameter = ctx.parameter();\n\t\tfinal var characterType = nodeBuilder().getCharacterType();\n\t\tif ( parameter instanceof HqlParser.NamedParameterContext namedParameterContext ) {\n\t\t\treturn visitNamedParameter( namedParameterContext, characterType );\n\t\t}\n\t\telse if ( parameter instanceof HqlParser.PositionalParameterContext positionalParameterContext ) {\n\t\t\treturn visitPositionalParameter( positionalParameterContext, characterType );\n\t\t}\n\t\telse {\n\t\t\tfinal var terminalNode = (TerminalNode) ctx.getChild( 1 );\n\t\t\tfinal String escape = unquoteStringLiteral( terminalNode.getText() );\n\t\t\tif ( escape.length() != 1 ) {\n\t\t\t\tthrow new SemanticException(\n\t\t\t\t\t\t\"Escape character literals must have exactly a single character, but found: \" + escape,\n\t\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn new SqmLiteral<>( escape.charAt( 0 ), characterType, nodeBuilder() );\n\t\t}\n\t}\n\n\t@Override\n\tpublic SqmPredicate visitMemberOfPredicate(HqlParser.MemberOfPredicateContext ctx) {\n\t\tfinal boolean negated = ctx.NOT() != null;\n\t\tif ( consumeDomainPath( ctx.path() )\n\t\t\t\tinstanceof SqmPluralValuedSimplePath<?> pluralValuedSimplePath ) {\n\t\t\treturn new SqmMemberOfPredicate(\n\t\t\t\t\t(SqmExpression<?>) ctx.expression().accept( this ),\n\t\t\t\t\tpluralValuedSimplePath,\n\t\t\t\t\tnegated,\n\t\t\t\t\tnodeBuilder()","sourceCodeStart":3303,"sourceCodeEnd":3339,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java#L3303-L3339","documentation":"Error \"Escape character literals must have exactly a single character, but found: {}\" thrown in hibernate/hibernate-orm.","triggerScenarios":"A runtime precondition of the Hibernate API is violated.","commonSituations":"Occurs when application code or configuration does not satisfy the documented contract of the API being called.","solutions":["Use a single-character escape literal in the ESCAPE clause.","Fix the escape string length."],"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"}