{"record":{"id":"3789447b32c8531d","repo":"apache/dolphinscheduler","slug":"project-parameter-already-exists","errorCode":"PROJECT_PARAMETER_ALREADY_EXISTS","errorMessage":"ProjectParameter {} already exists.","messagePattern":"ProjectParameter (.+?) already exists\\.","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectParameterServiceImpl.java","lineNumber":85,"sourceCode":"\n    @Override\n    @Transactional\n    public Result createProjectParameter(User loginUser, long projectCode, String projectParameterName,\n                                         String projectParameterValue, String projectParameterDataType) {\n        Result result = new Result();\n\n        // check if user have write perm for project\n        Project project = projectDao.queryByCode(projectCode);\n        projectService.checkHasProjectWritePermissionThrowException(loginUser, project);\n\n        // check if project parameter name exists\n        ProjectParameter projectParameter = projectParameterMapper.selectOne(new QueryWrapper<ProjectParameter>()\n                .lambda()\n                .eq(ProjectParameter::getProjectCode, projectCode)\n                .eq(ProjectParameter::getParamName, projectParameterName));\n\n        if (projectParameter != null) {\n            log.warn(\"ProjectParameter {} already exists.\", projectParameter.getParamName());\n            putMsg(result, Status.PROJECT_PARAMETER_ALREADY_EXISTS, projectParameter.getParamName());\n            return result;\n        }\n\n        Date now = new Date();\n\n        projectParameter = ProjectParameter\n                .builder()\n                .paramName(projectParameterName)\n                .paramValue(projectParameterValue)\n                .paramDataType(projectParameterDataType)\n                .code(CodeGenerateUtils.genCode())\n                .projectCode(projectCode)\n                .userId(loginUser.getId())\n                .operator(loginUser.getId())\n                .createTime(now)\n                .updateTime(now)\n                .build();","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectParameterServiceImpl.java#L67-L103","documentation":"createProjectParameter returns PROJECT_PARAMETER_ALREADY_EXISTS when a ProjectParameter row with the same projectCode and paramName already exists. Parameter names must be unique within a project, so duplicate creation is rejected.","triggerScenarios":"POST /project-parameter with a paramName that already exists in the given projectCode, e.g. creating parameter 'jdbc.url' twice in the same project.","commonSituations":"Re-submitting a create form after a previous successful save; automation scripts creating parameters idempotently; user typing a name that collides with an existing parameter.","solutions":["Use the update (PUT /project-parameter) endpoint instead of create to change an existing parameter's value.","Rename the new parameter to a unique name within the project.","Query existing parameters first (GET /project-parameter/list) and skip creation if present."],"exampleFix":"// before\nservice.createProjectParameter(user, code, \"jdbc.url\", \"jdbc:...\"); // fails if exists\n// after\nif (projectParameterService.listProjectParameter(user, code, \"jdbc.url\", 1, 10).getResult() == null) {\n    service.createProjectParameter(user, code, \"jdbc.url\", \"jdbc:...\");\n}","handlingStrategy":"try-catch","validationCode":"long existing = projectParameterMapper.selectCount(new LambdaQueryWrapper<ProjectParameter>()\n        .eq(ProjectParameter::getProjectCode, code)\n        .eq(ProjectParameter::getParamName, name));\nif (existing > 0) { /* update instead of create */ }","typeGuard":null,"tryCatchPattern":"catch (ServiceException e) { if (e.getCode() == Status.PROJECT_PARAMETER_ALREADY_EXISTS) { /* fall back to update */ } }","preventionTips":["Check name availability before create.","Prefer upsert semantics in automation scripts.","Enforce unique parameter naming conventions per project."],"tags":["project-parameter","duplicate","uniqueness"],"backgroundTag":"file-already-exists","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}