{"record":{"id":"f5fec36f8084a47d","repo":"hibernate/hibernate-orm","slug":"path-did-not-map-to-a-column","errorCode":null,"errorMessage":"path did not map to a column","messagePattern":"path did not map to a column","errorType":"exception","errorClass":"HqlInterpretationException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/dialect/function/SqlColumn.java","lineNumber":54,"sourceCode":"\t\tthis.columnName = columnName;\n\t}\n\n\t@Override\n\tpublic void render(\n\t\t\tSqlAppender sqlAppender,\n\t\t\tList<? extends SqlAstNode> arguments,\n\t\t\tReturnableType<?> returnType,\n\t\t\tSqlAstTranslator<?> walker) {\n\t\tfinal SqlAstNode sqlAstNode = arguments.get(0);\n\t\tfinal ColumnReference reference;\n\t\tif ( sqlAstNode instanceof Assignable assignable ) {\n\t\t\treference = assignable.getColumnReferences().get(0);\n\t\t}\n\t\telse if ( sqlAstNode instanceof Expression expression ) {\n\t\t\treference = expression.getColumnReference();\n\t\t}\n\t\telse {\n\t\t\tthrow new HqlInterpretationException( \"path did not map to a column\" );\n\t\t}\n\t\tsqlAppender.appendSql( reference.getQualifier() );\n\t\tsqlAppender.appendSql( '.' );\n\t\tsqlAppender.appendSql( columnName );\n\t}\n\n}\n","sourceCodeStart":36,"sourceCodeEnd":62,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/dialect/function/SqlColumn.java#L36-L62","documentation":"HQL's column(\"name\", path) function renders a raw qualified column reference. The path argument must be an Assignable with column references or an Expression exposing a ColumnReference; if the argument is a literal, a parameter, or an expression with no column backing (formula, aggregate, computed value), interpretation fails with HqlInterpretationException.","triggerScenarios":"HQL: column(\"x\", :param), column(\"x\", 'literal'), or a path that resolves to a formula/aggregate instead of a column-backed attribute.","commonSituations":"Hand-written HQL fragments in @Where/@SQL restrictions; migrating native SQL fragments to HQL by replacing table aliases with column() calls; referencing keys of element collections in odd positions.","solutions":["Pass a column-backed entity attribute path: column(\"x\", e.someAttribute)","Use sql(\"...?\") with placeholders for arbitrary literal SQL fragments","Verify the referenced attribute is a normal column mapping, not a @Formula or derived expression","Check that the path resolves to an entity alias actually present in the query"],"exampleFix":"// before\nselect column('aud_id', :auditRef) from AuditLog a\n\n// after\nselect column('aud_id', a.sourceRef) from AuditLog a","handlingStrategy":"validation","validationCode":"// column(\"name\", path) requires a plain alias.attribute path — reject params/literals early\nprivate static final java.util.regex.Pattern COLUMN_ARG =\n    java.util.regex.Pattern.compile(\"column\\\\(\\\\s*\\\"[^\\\"]*\\\"\\\\s*,\\\\s*([A-Za-z_][\\\\w]*\\\\.[A-Za-z_][\\\\w.]*)\\\\s*\\\\)\");\n\nstatic boolean columnArgsArePaths(String hql) {\n    java.util.regex.Matcher m = COLUMN_ARG.matcher(hql);\n    while (m.find()) { /* matched a well-formed path */ }\n    return !hql.toLowerCase(java.util.Locale.ROOT).matches(\"(?s).*column\\\\(\\\\s*\\\"[^\\\"]*\\\"\\\\s*,\\\\s*[:'\\\\d].*\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    return em.createQuery(hql).getResultList();\n} catch (org.hibernate.query.HqlInterpretationException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"did not map to a column\")) {\n        throw new QuerySetupException(\"column() needs a column-backed attribute path, not a literal/parameter\", e);\n    }\n    throw e;\n}","preventionTips":["Only use column() with alias.attribute paths that map to real columns","Use sql(\"...?\") for literal SQL fragments instead of column()","Avoid column() over @Formula attributes or computed expressions"],"tags":["hibernate","hql","column-function","path-resolution","native-sql-bridge"],"backgroundTag":"invalid-hql-path-expression","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}