alibaba/spring-ai-alibaba · error · RuntimeException

数据集版本不存在:

Error message

数据集版本不存在: 

What it means

DatasetItemServiceImpl.createFromTrace pushes trace-derived items into a dataset version; it loads the target DatasetVersionDO via datasetVersionMapper.selectById and throws this RuntimeException when the row is absent. The update of dataset items cannot proceed without an existing version.

Source

Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetItemServiceImpl.java:79

        List<DatasetItem> datasetItemList = request.getDataContent().stream().map(
                dataContent -> {
                    DatasetItemDO datasetItemDO = DatasetItemDO.builder()
                            .datasetId(request.getDatasetId())
                            .dataContent(dataContent)
                            .columnsConfig(JSONObject.toJSONString(request.getColumnsConfig()))
                            .build();
                    datasetItemMapper.insert(datasetItemDO);
                    itemIds.add(datasetItemDO.getId());
                    return DatasetItem.fromDO(datasetItemDO);
                }
        ).toList();

        if (!itemIds.isEmpty()) {
            // 更新数据集版本中的数据项列表
            DatasetVersionDO datasetVersionDO = datasetVersionMapper.selectById(request.getDatasetVersionId());
            if (datasetVersionDO == null) {
                throw new RuntimeException("数据集版本不存在: " + request.getDatasetVersionId());
            }

            List<Long> datasetItems = CommonUtils.parseItemIds(datasetVersionDO.getDatasetItems());
            datasetItems.addAll(itemIds);

            datasetVersionMapper.updateDatasetItems(datasetVersionDO.getId(),
                    datasetItems.toString(),datasetItems.size()
            );

        }

        return  datasetItemList;

    }

    @Override
    public PageResult<DatasetItem> list(DatasetItemListRequest request) {
        log.info("根据数据集版本ID查询数据项列表: datasetVersionId={}, pageNumber={}, pageSize={}", request.getDatasetVersionId(), request.getPageNumber(), request.getPageSize());

View on GitHub (pinned to f82da0b50f)

Solutions

  1. Verify the dataset version id exists: run SELECT * FROM dataset_version WHERE id = <id> (or check via admin UI)
  2. Create the dataset version first (or pick an existing version) before calling createFromTrace
  3. Fix the caller to pass the correct datasetVersionId from the current dataset's version list
  4. If versions are auto-cleaned, add existence handling in the caller to skip or recreate the version instead of failing

Example fix

// before
datasetItemService.createFromTrace(req.withDatasetVersionId(999L)); // version deleted
// after
Long versionId = datasetVersionService.createVersion(datasetId);
datasetItemService.createFromTrace(req.withDatasetVersionId(versionId));
Defensive patterns

Strategy: try-catch

Validate before calling

// Java: confirm the dataset version exists before importing trace items
if (datasetVersionMapper.selectById(request.getDatasetVersionId()) == null) {
    throw new IllegalStateException("Dataset version not found: " + request.getDatasetVersionId());
}

Type guard

boolean versionExists(DatasetVersionDO v) { return v != null; }

Try / catch

try {
    datasetItemService.createFromTrace(request);
} catch (RuntimeException e) {
    if (e.getMessage().startsWith("数据集版本不存在")) {
        // create the version or refresh the id, then retry
    }
}

Prevention

When it happens

Trigger: Calling createFromTrace with request.getDatasetVersionId() referencing a dataset version id that does not exist in the dataset_version table (already deleted, never created, or wrong id/type passed).

Common situations: A dataset version deleted (or cascade-deleted with its dataset) while traces still reference it; copying a request across environments (dev id used against prod DB); front-end sending a stale id after version regeneration; id passed as string vs numeric mismatch in the mapper.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


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