{"record":{"id":"fc7f57d1e04a6b9c","repo":"pentaho/pentaho-kettle","slug":"unable-to-find-job-entry-type-with-id-jobentrytypeid-in-the","errorCode":null,"errorMessage":"Unable to find Job Entry Type with id=jobEntryTypeId in the repository","messagePattern":"Unable to find Job Entry Type with id=jobEntryTypeId in the repository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryJobEntryDelegate.java","lineNumber":169,"sourceCode":"              // Otherwise you're on your own.\n              //\n              if ( jobEntry instanceof JobEntryBase ) {\n                loadJobEntryBase( (JobEntryBase) jobEntry, jobEntryId, databases, slaveServers );\n                ( (JobEntryBase) jobEntry ).setAttributesMap( loadJobEntryAttributesMap( jobId, jobEntryId ) );\n              }\n\n              compatibleJobEntryLoadRep( jobEntry, repository, jobEntryTypeId, databases, slaveServers );\n              jobEntry.loadRep( repository, repository.metaStore, jobEntryId, databases, slaveServers );\n\n              jobEntryCopy.getEntry().setObjectId( jobEntryId );\n\n              jobentries.add( jobEntryCopy.getEntry() );\n            } else {\n              throw new KettleException( \"JobEntryLoader was unable to find Job Entry Plugin with description [\"\n                + jet_code + \"].\" );\n            }\n          } else {\n            throw new KettleException( \"Unable to find Job Entry Type with id=\"\n              + jobEntryTypeId + \" in the repository\" );\n          }\n        }\n\n        jobEntryCopy.setLocation( locx, locy );\n        jobEntryCopy.setDrawn( isdrawn );\n        jobEntryCopy.setLaunchingInParallel( isparallel );\n\n        return jobEntryCopy;\n      } else {\n        throw new KettleException( \"Unable to find job entry copy in repository with id_jobentry_copy=\"\n          + jobEntryCopyId );\n      }\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to load job entry copy from repository with id_jobentry_copy=\"\n        + jobEntryCopyId, dbe );\n    }\n  }","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryJobEntryDelegate.java#L151-L187","documentation":"The Pentaho Kettle database repository loader could not resolve a job entry's type id (id_jobentry_type) to a known job entry type code in table R_JOBENTRY_TYPE. This means the row referencing the job entry type is missing or stale, so the job entry cannot be reconstructed and loading aborts with a KettleException.","triggerScenarios":"Calling KettleDatabaseRepositoryJobEntryDelegate.loadJobEntryCopy where getJobEntryType(id_jobentry_type) returns null — i.e. the id_jobentry_type column in R_JOBENTRY_COPY points at a row that does not exist or was deleted from R_JOBENTRY_TYPE.","commonSituations":"Restoring a job from a partial repository backup; a repository upgraded/migrated between Pentaho versions where job entry types were renamed; manually editing or pruning repository tables; a corrupted repository database.","solutions":["Check that R_JOBENTRY_TYPE contains a row whose ID_JOBENTRY_TYPE matches the id_jobentry_type referenced by the R_JOBENTRY_COPY row for this job entry copy","Reinsert or repair the missing job entry type row (correct CODE value for the plugin, e.g. 'SPECIAL')","Re-export the job XML and re-import it into a healthy repository to recreate the entry copy with a valid type","Check repository version compatibility (repository upgrade via Repository.connect/upgrade) so type tables match the installed plugins"],"exampleFix":"// before: loading a job copy whose type row was pruned\nJobEntryCopy copy = repository.jobEntryDelegate.loadJobEntryCopy(jobId, jobEntryCopyId, jobMeta);\n// after: verify the type row first / repair it\nLongObjectId typeId = repository.connectionDelegate.getIDWithValue(\n  repository.connectionDelegate.quoteTable(KettleDatabaseRepository.TABLE_R_JOBENTRY_TYPE), \"ID_JOBENTRY_TYPE\", \"CODE\", \"SPECIAL\");\nif (typeId == null) throw new IllegalStateException(\"Run repository repair: R_JOBENTRY_TYPE is missing required codes\");","handlingStrategy":"try-catch","validationCode":"LongObjectId typeId = (LongObjectId) repository.connectionDelegate.getIDWithValue(\n  repository.connectionDelegate.quoteTable(KettleDatabaseRepository.TABLE_R_JOBENTRY_TYPE),\n  \"ID_JOBENTRY_TYPE\", \"CODE\", expectedCode);\nif (typeId == null) throw new IllegalStateException(\"Missing R_JOBENTRY_TYPE row\");","typeGuard":"boolean typeRowExists(ObjectId typeId) { return repository.connectionDelegate.countNrSomething(\"ID_JOBENTRY_TYPE\", KettleDatabaseRepository.TABLE_R_JOBENTRY_TYPE, \"ID_JOBENTRY_TYPE\", typeId) > 0; }","tryCatchPattern":"try { return repository.jobEntryDelegate.loadJobEntryCopy(jobId, copyId, jobMeta); }\ncatch (KettleException e) { throw new KettleException(\"Job entry type row missing in repository; repair R_JOBENTRY_TYPE\", e); }","preventionTips":["Never delete rows from R_JOBENTRY_TYPE manually","Keep repository schema and plugin set in sync across PDI upgrades","Back up the repository before cleanup scripts"],"tags":["kettle","repository","database","job-entry","missing-record"],"backgroundTag":"record-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}