{"record":{"id":"9f3771c9a4ab062f","repo":"alibaba/spring-ai-alibaba","slug":"dataset-id-cannot-be-null","errorCode":null,"errorMessage":"Dataset ID cannot be null","messagePattern":"Dataset ID cannot be null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetVersionServiceImpl.java","lineNumber":43,"sourceCode":"import java.util.stream.Collectors;\n\n@Slf4j\n@Service\n@RequiredArgsConstructor\npublic class DatasetVersionServiceImpl implements DatasetVersionService {\n\n    private final DatasetVersionMapper datasetVersionMapper;\n    private final DatasetMapper datasetMapper;\n    private final ExperimentMapper experimentMapper;\n\n    @Override\n    @Transactional\n    public DatasetVersion create(DatasetVersionCreateRequest request) {\n        log.info(\"Creating dataset version: {}\", request);\n\n        // Validate request\n        if (request.getDatasetId() == null) {\n            throw new IllegalArgumentException(\"Dataset ID cannot be null\");\n        }\n\n        //检查 dataset是否存在\n        if (datasetMapper.selectById(request.getDatasetId()) == null) {\n            throw new IllegalArgumentException(\"Dataset not found: \" + request.getDatasetId());\n        }\n\n        // 获取当前最大的version\n        DatasetVersionDO latestDatasetVersionDO = datasetVersionMapper.selectLatestVersion(request.getDatasetId());\n\n        String currentVersion = Objects.isNull(latestDatasetVersionDO)?null:latestDatasetVersionDO.getVersion();\n\n        // Generate version number\n        String versionNumber = VersionUtils.generateVersionNumber(currentVersion);\n\n\n        // Build entity\n        DatasetVersionDO datasetVersionDO = DatasetVersionDO.builder()","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/alibaba/spring-ai-alibaba/blob/f82da0b50f35744c13968191be2b1cd2452ef550/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetVersionServiceImpl.java#L25-L61","documentation":"Input validation failure in DatasetVersionServiceImpl.create. A dataset version must reference its parent dataset, so when DatasetVersionCreateRequest.getDatasetId() is null the method throws IllegalArgumentException inside the @Transactional create; this is a generic preconditions guard that rolls back the transaction and prevents an orphan version row from being written. The caller must populate datasetId with an existing dataset's id.","triggerScenarios":"Calling create(DatasetVersionCreateRequest) with datasetId never set; JSON payload missing the datasetId field; DTO field name mismatch during deserialization.","commonSituations":"Builder/DTO assembled without setting datasetId; front-end form not sending the field; client mapping 'dataset_id' snake_case while the server expects camelCase without a naming strategy.","solutions":["Set datasetId on the request before calling create","Add @NotNull on the DTO's datasetId for standardized validation","Fix the JSON key or configure snake_case mapping so datasetId is populated","Ensure the client resolves a valid dataset id first"],"exampleFix":"// before\nDatasetVersionCreateRequest req = new DatasetVersionCreateRequest();\nreq.setDatasetItems(items);\ndatasetVersionService.create(req);\n// after\nDatasetVersionCreateRequest req = new DatasetVersionCreateRequest();\nreq.setDatasetId(datasetId);\nreq.setDatasetItems(items);\ndatasetVersionService.create(req);","handlingStrategy":"validation","validationCode":"if (req.getDatasetId() == null) { throw new IllegalArgumentException(\"datasetId is required\"); }","typeGuard":"boolean hasDatasetId(DatasetVersionCreateRequest r) { return r != null && r.getDatasetId() != null; }","tryCatchPattern":"try { versionService.create(req); } catch (IllegalArgumentException e) { return ResponseEntity.badRequest().body(\"datasetId is required\"); }","preventionTips":["Use @NotNull on the DTO field and @Valid in the controller","Build requests via a constructor/builder that forces datasetId","Ensure JSON serialization maps dataset_id/datasetId consistently"],"tags":["validation","null-argument"],"backgroundTag":"null-argument","analyzedSha":"f82da0b50f35744c13968191be2b1cd2452ef550","analyzedAt":"2026-09-09T15:32:42.421Z","contentChangedAt":"2026-09-09T15:32:42.421Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}