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

  1. Check server logs / enable MyBatis SQL logging and inspect the underlying SQLIntegrityConstraintViolationException or duplicate-key error.
  2. Verify all required evaluator fields are set before insert (name, type, etc.) and that any referenced IDs exist.
  3. 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

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.