alibaba/spring-ai-alibaba · error · RuntimeException
创建评估器版本失败
Error message
创建评估器版本失败
What it means
Thrown by EvaluatorVersionServiceImpl.create when evaluatorVersionMapper.insert returns 0, meaning the new evaluator version row was not persisted. MyBatis insert returning 0 usually indicates a constraint violation surfaced as a no-op or a DB-level failure swallowed by the mapper.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/EvaluatorVersionServiceImpl.java:49
// 构建DO对象
EvaluatorVersionDO evaluatorVersionDO = EvaluatorVersionDO.builder()
.evaluatorId(Long.valueOf(request.getEvaluatorId()))
.description(request.getDescription())
.version(request.getVersion())
.modelConfig(request.getModelConfig())
.prompt(request.getPrompt())
.variables(request.getVariables())
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.build();
// 插入数据库
int result = evaluatorVersionMapper.insert(evaluatorVersionDO);
if (result > 0) {
log.info("评估器版本创建成功: {}", evaluatorVersionDO.getId());
return EvaluatorVersion.fromDO(evaluatorVersionDO);
} else {
throw new RuntimeException("创建评估器版本失败");
}
}
@Override
public PageResult<EvaluatorVersion> list(EvaluatorVersionListRequest request) {
log.info("查询评估器版本列表: {}", request);
// 计算分页参数
int pageNumber = request.getPageNumber() != null ? request.getPageNumber() : 1;
int pageSize = request.getPageSize() != null ? request.getPageSize() : 10;
long offset = (pageNumber - 1L) * pageSize;
// 查询数据
List<EvaluatorVersionDO> evaluatorVersionDOList = evaluatorVersionMapper.selectListByEvaluatorId(
request.getEvaluatorId(), request.getName(), offset, pageSize);
int total = evaluatorVersionMapper.countByEvaluatorId(request.getEvaluatorId(), null);
// 封装分页结果View on GitHub (pinned to f82da0b50f)
Solutions
- Check DB constraints and migrations for evaluator_version table; fix duplicate/foreign-key data
- Throw a typed DuplicateVersionException on 0-rows so clients see 409 instead of generic 500
- Verify the evaluator referenced by the request still exists before inserting
- Inspect server logs / SQL exceptions emitted around the insert for the root cause
Example fix
// before
int result = evaluatorVersionMapper.insert(evaluatorVersionDO);
if (result > 0) { ... } else {
throw new RuntimeException("创建评估器版本失败");
}
// after
if (evaluatorMapper.selectById(request.getEvaluatorId()) == null) {
throw new EvaluatorNotFoundException(request.getEvaluatorId());
}
int result = evaluatorVersionMapper.insert(evaluatorVersionDO);
if (result <= 0) {
throw new EvaluatorVersionCreateException("Duplicate or invalid evaluator version: " + request.getVersion());
} Defensive patterns
Strategy: validation
Validate before calling
if (evaluatorMapper.selectById(request.getEvaluatorId()) == null) throw new EvaluatorNotFoundException(request.getEvaluatorId()); if (evaluatorVersionMapper.selectByVersion(request.getEvaluatorId(), request.getVersion()) != null) throw new DuplicateVersionException();
Type guard
boolean canCreateVersion(EvaluatorVersionCreateRequest r) { return r != null && r.getEvaluatorId() != null && evaluatorMapper.selectById(r.getEvaluatorId()) != null; } Try / catch
try { return evaluatorVersionService.create(request); } catch (RuntimeException e) { log.error("version create failed", e); throw new ResponseStatusException(HttpStatus.CONFLICT, e.getMessage()); } Prevention
- Validate referenced evaluator exists first
- Enforce unique (evaluator_id, version) in app code before insert
- Keep DB schema migrations in sync
When it happens
Trigger: Inserting an evaluator version whose evaluator_id violates a foreign key, a duplicate version number under a unique constraint, or a schema mismatch causing the affected-row count to be 0.
Common situations: Creating a version for an evaluator that was deleted concurrently; unique key on (evaluator_id, version) colliding; running against a DB whose schema is behind migrations.
Related errors
- DeleteMCPServerError
- CreateToolError
- UpdateToolError
- Failed to create dataset version
- Failed to create experiment
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/af741701249b93d0.
Report an issue: GitHub.