alibaba/spring-ai-alibaba · error · RuntimeException
创建评估器失败
Error message
创建评估器失败
What it means
EvaluatorServiceImpl.create() inserts the evaluator via evaluatorMapper.insert(evaluatorDO) and throws RuntimeException("创建评估器失败") ("failed to create evaluator") when the insert returns <= 0 affected rows. The domain validation already passed, so this signals the database rejected or silently skipped the INSERT.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/EvaluatorServiceImpl.java:63
@Override
public Evaluator create(EvaluatorCreateRequest request) {
log.info("创建评估器: {}", request);
// 构建DO对象
EvaluatorDO evaluatorDO = EvaluatorDO.builder()
.name(request.getName())
.description(request.getDescription())
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.build();
// 插入数据库
int result = evaluatorMapper.insert(evaluatorDO);
if (result > 0) {
log.info("评估器创建成功: {}", evaluatorDO.getId());
return Evaluator.fromDO(evaluatorDO);
} else {
throw new RuntimeException("创建评估器失败");
}
}
@Override
public PageResult<Evaluator> list(EvaluatorListRequest 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<EvaluatorDO> evaluatorDOList = evaluatorMapper.selectList(request.getName(), offset, pageSize);
List<Evaluator> evaluatorList = evaluatorDOList.stream()
.map(Evaluator::fromDO)
.map(evaluator -> {
EvaluatorVersionDO evaluatorVersionDO = evaluatorVersionMapper.selectLatestVersionByEvaluatorId(evaluator.getId());
if (evaluatorVersionDO != null) {View on GitHub (pinned to f82da0b50f)
Solutions
- Check server logs / enable MyBatis SQL logging and inspect the underlying SQLIntegrityConstraintViolationException or duplicate-key error.
- Verify all required evaluator fields are set before insert (name, type, etc.) and that any referenced IDs exist.
- Confirm the evaluator table schema matches the entity (run pending migrations).
Example fix
// before
service.create(requestWithNameThatAlreadyExists); // duplicate key -> 0 rows -> RuntimeException
// after
if (evaluatorMapper.findByName(request.getName()) == null) {
service.create(request);
} Defensive patterns
Strategy: try-catch
Validate before calling
if (request.getName() == null || request.getType() == null) {
throw new IllegalArgumentException("name and type are required to create an evaluator");
} Try / catch
try {
return service.create(request);
} catch (RuntimeException e) {
// inspect cause for DataIntegrityViolationException / duplicate key
log.error("Evaluator insert failed", e);
throw new ResponseStatusException(HttpStatus.CONFLICT, "evaluator could not be created (duplicate or constraint?)");
} Prevention
- Uniquely name evaluators to avoid duplicate-key failures.
- Populate all NOT NULL entity fields before create.
- Enable SQL logging in dev to see the underlying constraint violation.
- Keep DB migrations in sync with the evaluator entity schema.
When it happens
Trigger: INSERT violating a DB constraint (NOT NULL column, unique name/index on evaluator, FK to a nonexistent owner/dataset); table schema drift after migration; mapper XML/annotation insert statement misconfigured.
Common situations: Creating an evaluator whose type/name duplicates an existing row under a unique constraint; missing required columns after a schema upgrade; inserting into the wrong table because of a copied mapper config.
Related errors
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/ab6c00bc106ca11a.
Report an issue: GitHub.