alibaba/spring-ai-alibaba · error · IllegalArgumentException
Dataset ID cannot be null
Error message
Dataset ID cannot be null
What it means
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.
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
Example fix
// before DatasetVersionCreateRequest req = new DatasetVersionCreateRequest(); req.setDatasetItems(items); datasetVersionService.create(req); // after DatasetVersionCreateRequest req = new DatasetVersionCreateRequest(); req.setDatasetId(datasetId); req.setDatasetItems(items); datasetVersionService.create(req);
Defensive patterns
Strategy: validation
Validate before calling
if (req.getDatasetId() == null) { throw new IllegalArgumentException("datasetId is required"); } Type guard
boolean hasDatasetId(DatasetVersionCreateRequest r) { return r != null && r.getDatasetId() != null; } Try / catch
try { versionService.create(req); } catch (IllegalArgumentException e) { return ResponseEntity.badRequest().body("datasetId is required"); } Prevention
- 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
When it happens
Trigger: Calling create(DatasetVersionCreateRequest) with datasetId never set; JSON payload missing the datasetId field; DTO field name mismatch during deserialization.
Common situations: 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.
Related errors
- invalid agent dsl: data is null
- key cannot be null
- MISSING_PARAMS
- namespaceRequest cannot be null
- searchRequest cannot be null
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/9f3771c9a4ab062f.
Report an issue: GitHub.
Appendix: source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetVersionServiceImpl.java:43
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class DatasetVersionServiceImpl implements DatasetVersionService {
private final DatasetVersionMapper datasetVersionMapper;
private final DatasetMapper datasetMapper;
private final ExperimentMapper experimentMapper;
@Override
@Transactional
public DatasetVersion create(DatasetVersionCreateRequest request) {
log.info("Creating dataset version: {}", request);
// Validate request
if (request.getDatasetId() == null) {
throw new IllegalArgumentException("Dataset ID cannot be null");
}
//检查 dataset是否存在
if (datasetMapper.selectById(request.getDatasetId()) == null) {
throw new IllegalArgumentException("Dataset not found: " + request.getDatasetId());
}
// 获取当前最大的version
DatasetVersionDO latestDatasetVersionDO = datasetVersionMapper.selectLatestVersion(request.getDatasetId());
String currentVersion = Objects.isNull(latestDatasetVersionDO)?null:latestDatasetVersionDO.getVersion();
// Generate version number
String versionNumber = VersionUtils.generateVersionNumber(currentVersion);
// Build entity
DatasetVersionDO datasetVersionDO = DatasetVersionDO.builder()View on GitHub (pinned to f82da0b50f)