alibaba/spring-ai-alibaba · error · RuntimeException
Failed to create experiment
Error message
Failed to create experiment
What it means
Thrown by ExperimentServiceImpl.create when experimentMapper.insert(experimentDO) returns <= 0 rows affected, meaning the experiment row was not written to the database. It signals a failed persistence step during experiment creation.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java:88
// 构建实验实体
ExperimentDO experimentDO = ExperimentDO.builder()
.name(request.getName())
.description(request.getDescription())
.datasetId(request.getDatasetId())
.datasetVersionId(request.getDatasetVersionId())
.datasetVersion(request.getDatasetVersion())
.evaluationObjectConfig(request.getEvaluationObjectConfig())
.evaluatorConfig(request.getEvaluatorConfig())
.status(String.valueOf(ExperimentStatus.RUNNING))
.progress(0)
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.build();
// 插入数据库
int result = experimentMapper.insert(experimentDO);
if (result <= 0) {
throw new RuntimeException("Failed to create experiment");
}
log.info("实验创建成功: {}", experimentDO.getId());
// 异步启动实验执行
startExperimentExecution(experimentDO);
return Experiment.fromDO(experimentDO);
}
@Override
public PageResult<Experiment> list(ExperimentListRequest request) {
log.info("查询实验列表: {}", request);
ExperimentStatus status = null;
if (StringUtils.hasText(request.getStatus())) {
try {View on GitHub (pinned to f82da0b50f)
Solutions
- Check application logs for the underlying SQL exception around the insert
- Validate referenced entities (dataset, model, evaluator) exist before insert
- Run database migrations so the schema matches the current code
- Throw a typed ExperimentCreateException and map DB constraint errors to 4xx responses
Example fix
// before
int result = experimentMapper.insert(experimentDO);
if (result <= 0) {
throw new RuntimeException("Failed to create experiment");
}
// after
int result = experimentMapper.insert(experimentDO);
if (result <= 0) {
throw new ExperimentCreationException("Experiment insert affected 0 rows"); // -> 500 with context
} Defensive patterns
Strategy: try-catch
Validate before calling
if (request.getDatasetId() != null && datasetService.getById(request.getDatasetId()) == null) throw new IllegalArgumentException("dataset not found"); Try / catch
try { experimentService.create(request); } catch (RuntimeException e) { log.error("experiment create failed", e); throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "experiment persistence failed", e); } Prevention
- Keep DB migrations aligned with code
- Validate foreign-key references before insert
- Monitor logs for SQL exceptions on insert
When it happens
Trigger: Insert affected 0 rows due to a constraint violation, missing required column data, schema drift, or a database error converted by MyBatis into a 0-row update count.
Common situations: experiment table schema missing new columns added in code; foreign key to a non-existent dataset/model; DB connection failing mid-request; running against a read-only replica.
Related errors
- Failed to create dataset version
- 创建评估器版本失败
- Unable to insert checkpoint
- Unable to insert checkpoint
- INVALID_PARAMS
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/8cbbf72a81f47b51.
Report an issue: GitHub.