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.

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)

Solutions

  1. Set datasetId on the request before calling create
  2. Add @NotNull on the DTO's datasetId for standardized validation
  3. Fix the JSON key or configure snake_case mapping so datasetId is populated
  4. 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

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


AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09). Data as JSON: /api/errors/9f3771c9a4ab062f. Report an issue: GitHub.