{"record":{"id":"a3a39977761bdf10","repo":"iflytek/astron-agent","slug":"8518-database-table-field-lack","errorCode":"8518","errorMessage":"database.table.field.lack","messagePattern":"database\\.table\\.field\\.lack","errorType":"error_code","errorClass":"BusinessException","httpStatus":null,"severity":"error","filePath":"console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/database/DatabaseService.java","lineNumber":734,"sourceCode":"            }\n        }\n\n        // 3. Validate required fields\n        for (DbTableField field : fields) {\n            // Skip system field validation (for insert operations)\n            if (operateType.equals(DBOperateEnum.INSERT.getCode()) && Arrays.asList(SYSTEM_FIELDS).contains(field.getName())) {\n                continue;\n            }\n            if (operateType.equals(DBOperateEnum.DELETE.getCode()) || operateType.equals(DBOperateEnum.UPDATE.getCode())) {\n                // For delete and update operations, uuid and create_time are not validated\n                if (Arrays.asList(\"uuid\", \"create_time\").contains(field.getName())) {\n                    continue;\n                }\n            }\n            // Validate required fields without default values\n            if (Boolean.TRUE.equals(field.getIsRequired()) && field.getDefaultValue() == null && !params.containsKey(field.getName())) {\n                log.error(\"Missing required field: \" + field.getName());\n                throw new BusinessException(ResponseEnum.DATABASE_TABLE_FIELD_LACK);\n            }\n        }\n    }\n\n    private String buildDml(String tableName, Map<String, Object> params, Integer operateType) {\n        StringBuilder sql = new StringBuilder();\n        String table = dialect.quoteIdent(tableName);\n\n        if (DBOperateEnum.INSERT.getCode().equals(operateType)) {\n            // Filter null\n            Map<String, Object> nonNull = params.entrySet()\n                    .stream()\n                    .filter(e -> e.getValue() != null)\n                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));\n\n            List<String> cols = new ArrayList<>();\n            List<String> vals = new ArrayList<>();\n            cols.add(dialect.quoteIdent(\"uid\"));","sourceCodeStart":716,"sourceCodeEnd":752,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/database/DatabaseService.java#L716-L752","documentation":"Thrown by the private validateParams helper of DatabaseService when a required field (isRequired=true) with no default value is missing from the request params. Code 8518, message 'database.table.field.lack'. It enforces NOT-NULL requiredness at the service layer before DML is built.","triggerScenarios":"Insert/update operation where params lacks a key for a field marked isRequired=true whose defaultValue is null (and the field is not a system field skipped for insert). E.g. insert omitting a required 'title' column.","commonSituations":"Client form doesn't render a newly-added required field; bulk import rows with empty cells for required columns; older API clients built before a field became required.","solutions":["Read the log 'Missing required field: <name>' to see which field is missing.","Add the missing key with a valid value to the params map.","If the field should be optional, change isRequired=false or set a defaultValue in the table schema.","For imports, pre-fill required columns in the template/source file."],"exampleFix":"// before\nparams.put(\"name\", \"row1\"); // 'owner' is required, omitted\n// after\nif (fields.stream().anyMatch(f -> Boolean.TRUE.equals(f.getIsRequired()) && f.getDefaultValue() == null && !params.containsKey(f.getName()))) {\n    throw new IllegalArgumentException(\"fill required fields before submit\");\n}\nparams.put(\"owner\", \"alice\");","handlingStrategy":"validation","validationCode":"for (DbTableField f : fields) {\n    if (Boolean.TRUE.equals(f.getIsRequired()) && f.getDefaultValue() == null && !params.containsKey(f.getName())) {\n        throw new IllegalArgumentException(\"missing required field: \" + f.getName());\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    databaseService.operateTableData(dto);\n} catch (BusinessException ex) {\n    if (\"database.table.field.lack\".equals(ex.getMessage())) {\n        log.warn(\"required field missing; prompt user for missing inputs\");\n    }\n    throw ex;\n}","preventionTips":["Render required fields as mandatory in client forms","Re-check schema after table edits; requiredness may have changed","For imports, pre-fill required columns in templates"],"tags":["validation","required-fields","schema"],"backgroundTag":"missing-required-argument","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}