{"record":{"id":"dcb36a63f152a78c","repo":"hibernate/hibernate-orm","slug":"orderby-expression-s-is-not-a-domain-model-ref","errorCode":null,"errorMessage":"@OrderBy expression (%s) is not a domain-model reference, which violates the Jakarta Persistence specification - %s","messagePattern":"@OrderBy expression \\((.+?)\\) is not a domain-model reference, which violates the Jakarta Persistence specification - (.+?)","errorType":"exception","errorClass":"OrderByComplianceViolation","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ParseTreeVisitor.java","lineNumber":68,"sourceCode":"\t\t\tfor ( int i = 0; i < size; i += 2 ) {\n\t\t\t\tspecifications.add( visitSortSpecification( (OrderingParser.SortSpecificationContext) ctx.getChild( i ) ) );\n\t\t\t}\n\t\t\treturn specifications;\n\t\t}\n\t}\n\n\t@Override\n\tpublic OrderingSpecification visitSortSpecification(OrderingParser.SortSpecificationContext parsedSpec) {\n\t\tassert parsedSpec != null;\n\t\tassert parsedSpec.expression() != null;\n\n\t\tfinal OrderingExpression orderingExpression = (OrderingExpression) parsedSpec.getChild( 0 ).accept( this );\n\t\tif ( translationContext.getJpaCompliance().isJpaOrderByMappingComplianceEnabled() ) {\n\t\t\tif ( orderingExpression instanceof DomainPath ) {\n\t\t\t\t// nothing to do\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new OrderByComplianceViolation(\n\t\t\t\t\t\tString.format(\n\t\t\t\t\t\t\t\tLocale.ROOT,\n\t\t\t\t\t\t\t\t\"@OrderBy expression (%s) is not a domain-model reference, which violates the Jakarta Persistence specification - %s\",\n\t\t\t\t\t\t\t\tparsedSpec.expression().getText(),\n\t\t\t\t\t\t\t\torderingExpression.toDescriptiveText()\n\t\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfinal OrderingSpecification result = new OrderingSpecification( orderingExpression, parsedSpec.getChild( 0 ).getText() );\n\t\tint i = 1;\n\n\t\tif ( parsedSpec.getChildCount() > i ) {\n\t\t\tfinal ParseTree parseTree = parsedSpec.getChild( i );\n\t\t\tif ( parseTree instanceof OrderingParser.CollationSpecificationContext ) {\n\t\t\t\tresult.setCollation( (String) parseTree.getChild( 1 ).getChild( 0 ).accept( this ) );\n\t\t\t\ti++;","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ParseTreeVisitor.java#L50-L86","documentation":"Error \"@OrderBy expression (%s) is not a domain-model reference, which violates the Jakarta Persistence specification - %s\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown when an @OrderBy expression references something other than a domain-model path (e.g. a SQL function or literal), violating the JPA specification.","commonSituations":"See trigger scenarios.","solutions":["Rewrite the @OrderBy expression to reference domain-model attributes (e.g. 'name' or 'address.city') instead of SQL fragments or functions."],"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"}