{"record":{"id":"423892ea236a2a51","repo":"hibernate/hibernate-orm","slug":"there-must-be-at-least-a-single-root-table-assignm-423892","errorCode":null,"errorMessage":"There must be at least a single root table assignment","messagePattern":"There must be at least a single root table assignment","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/query/sqm/mutation/internal/temptable/TableBasedInsertHandler.java","lineNumber":496,"sourceCode":"\t\t\tboolean assignsId,\n\t\t\tString tableExpression,\n\t\t\tString[] keyColumns,\n\t\t\tMap<String, List<Assignment>> assignmentsByTable,\n\t\t\tExecutionContext executionContext) {\n\t\tfinal var updatingTableReference = updatingTableGroup.getTableReference(\n\t\t\t\tupdatingTableGroup.getNavigablePath(),\n\t\t\t\ttableExpression,\n\t\t\t\ttrue\n\t\t);\n\n\t\tfinal var generator = getEntityDescriptor().getGenerator();\n\t\tfinal var assignments = assignmentsByTable.get( tableExpression );\n\t\tif ( !assignsId\n\t\t\t&& ( assignments == null || assignments.isEmpty() )\n\t\t\t&& !generator.generatedOnExecution()\n\t\t\t&& ( !( generator instanceof BulkInsertionCapableIdentifierGenerator bulkInsertionCapable )\n\t\t\t\t\t|| bulkInsertionCapable.supportsBulkInsertionIdentifierGeneration() ) ) {\n\t\t\tthrow new IllegalStateException( \"There must be at least a single root table assignment\" );\n\t\t}\n\n\t\tfinal var dmlTableReference = resolveUnionTableReference( updatingTableReference, tableExpression );\n\n\t\t// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\t\t// Create the SQL AST and convert it into a JdbcOperation\n\t\tfinal var querySpec = new QuerySpec( true );\n\t\tfinal var temporaryTableReference = new NamedTableReference(\n\t\t\t\ttranslatedInsertStatement.getTargetTable().getTableExpression(),\n\t\t\t\t\"hte_tmp\"\n\t\t);\n\t\tfinal var temporaryTableGroup = new TableGroupImpl(\n\t\t\t\tupdatingTableGroup.getNavigablePath(),\n\t\t\t\tnull,\n\t\t\t\ttemporaryTableReference,\n\t\t\t\tgetEntityDescriptor()\n\t\t);\n\t\tquerySpec.getFromClause().addRoot( temporaryTableGroup );","sourceCodeStart":478,"sourceCodeEnd":514,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/query/sqm/mutation/internal/temptable/TableBasedInsertHandler.java#L478-L514","documentation":"Error \"There must be at least a single root table assignment\" thrown in hibernate/hibernate-orm.","triggerScenarios":"An UPDATE/INSERT assignment targets columns that cannot be handled by the mutation strategy.","commonSituations":"Bulk HQL update/insert statements assigning columns spread across multiple tables or columns of joined associations.","solutions":["The insert/update must assign at least one column of the root table.","Add an assignment that targets the root table, or ensure the id assignment is present."],"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"}