pentaho/pentaho-kettle · error · KettleException
Unable to find job entry copy in repository with…
Error message
Unable to find job entry copy in repository with id_jobentry_copy=jobEntryCopyId
What it means
No row was found in R_JOBENTRY_COPY for the requested id_jobentry_copy, so loadJobEntryCopy cannot return a JobEntryCopy and throws a KettleException. This is a plain record-not-found condition in the database repository.
Solutions
- Verify the row exists: SELECT * FROM R_JOBENTRY_COPY WHERE ID_JOBENTRY_COPY = <id>
- Reload the JobMeta from the repository so job entry copies are looked up with fresh, valid ids instead of stale cached ones
- Re-save the job to the repository to recreate missing copy rows
- Confirm you are connected to the same repository database the ids came from
Example fix
// before JobEntryCopy c = repository.jobEntryDelegate.loadJobEntryCopy(jobId, staleCopyId, jobMeta); // after: re-resolve the id from a freshly loaded job JobMeta jobMeta = repository.loadJob(jobName, null); JobEntryCopy c = jobMeta.findJobEntry(entryName, 0, false);
Defensive patterns
Strategy: validation
Validate before calling
Long copyId = ((LongObjectId) jobEntryCopyId).longValue();
// run: SELECT COUNT(*) FROM R_JOBENTRY_COPY WHERE ID_JOBENTRY_COPY = ?
if (count == 0) throw new IllegalStateException("id_jobentry_copy not in repository"); Type guard
boolean copyExists(ObjectId copyId) { return repository.connectionDelegate.getDatabase().countRecords(repository.databaseMeta.getSchemaAndTable("R_JOBENTRY_COPY"), "ID_JOBENTRY_COPY", copyId) > 0; } Try / catch
try { ... } catch (KettleException e) { if (e.getMessage().contains("Unable to find job entry copy")) reloadJobMetaFromRepository(); } Prevention
- Do not cache ObjectIds across repository reconnects
- Re-load JobMeta from the repository instead of reusing stale ids
- Verify you are connected to the intended repository database
When it happens
Trigger: Calling loadJobEntryCopy(jobId, jobEntryCopyId, ...) with a jobEntryCopyId whose row was deleted from R_JOBENTRY_COPY, or an id from a different/cleared repository.
Common situations: Caching ObjectIds across repository refreshes; copying jobs between repositories by id; rows removed by repository cleanup scripts; pointing the client at a different database than where the job was saved.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AppendMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/3281291ce03f7c90.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryJobEntryDelegate.java:180
jobentries.add( jobEntryCopy.getEntry() );
} else {
throw new KettleException( "JobEntryLoader was unable to find Job Entry Plugin with description ["
+ jet_code + "]." );
}
} else {
throw new KettleException( "Unable to find Job Entry Type with id="
+ jobEntryTypeId + " in the repository" );
}
}
jobEntryCopy.setLocation( locx, locy );
jobEntryCopy.setDrawn( isdrawn );
jobEntryCopy.setLaunchingInParallel( isparallel );
return jobEntryCopy;
} else {
throw new KettleException( "Unable to find job entry copy in repository with id_jobentry_copy="
+ jobEntryCopyId );
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to load job entry copy from repository with id_jobentry_copy="
+ jobEntryCopyId, dbe );
}
}
@SuppressWarnings( "deprecation" )
private void compatibleJobEntryLoadRep( JobEntryInterface jobEntry, KettleDatabaseRepository repository,
ObjectId id_jobentry_type, List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleException {
jobEntry.loadRep( repository, id_jobentry_type, databases, slaveServers );
}
public void saveJobEntryCopy( JobEntryCopy copy, ObjectId id_job, KettleDatabaseRepositoryMetaStore metaStore ) throws KettleException {
try {View on GitHub (pinned to f3058517a1)