pentaho/pentaho-kettle · error · KettleException
TransMeta.Exception.TransformationDoesNotExist
Error message
TransMeta.Exception.TransformationDoesNotExist
What it means
Thrown by loadTransformation when the repository lookup returns no transformation with the given id/name, i.e. transMeta.getObjectId() is null or the database read found no matching row. The delegate cannot load a transformation that does not exist in the repository, so it throws a KettleException naming the missing transformation.
Solutions
- Check existence first with repository.findTransformation(name, directory) or verify transMeta.getObjectId() != null before loading.
- Confirm the repository directory passed to loadTransformation is the one actually containing the transformation.
- Verify you are connected to the intended repository and the transformation was not renamed/deleted.
Example fix
// before
repository.loadTransformation(transMeta, directory, monitor, true, false); // throws if missing
// after
RepositoryDirectoryInterface dir = repository.findDirectory(directoryPath);
ObjectId id = repository.getTransformationID(transMeta.getName(), dir);
if (id == null) {
throw new KettleException("Transformation not found: " + transMeta.getName());
}
repository.loadTransformation(transMeta, dir, monitor, true, false); Defensive patterns
Strategy: validation
Validate before calling
RepositoryDirectoryInterface dir = repository.findDirectory(directoryPath);
ObjectId id = repository.getTransformationID(name, dir);
if (id == null) { throw new KettleException("Transformation " + name + " does not exist in " + directoryPath); } Try / catch
try { repository.loadTransformation(transMeta, dir, monitor, true, false); } catch (KettleException e) { if (repository.getTransformationID(name, dir) == null) { /* not found — handle as user error */ } else throw e; } Prevention
- Always resolve the transformation via findTransformation/getTransformationID before loading
- Verify the repository and directory are the intended ones
- Watch for name case-sensitivity differences
- Confirm the transformation still exists in shared/multi-user repositories
When it happens
Trigger: Calling repository.loadTransformation(transMeta, null/invalid directory, monitor, setInternalVariables, false) where the transformation name does not exist in the target repository directory, or passing a TransMeta whose ObjectId was never set by findByObjectId/findByDirectory.
Common situations: Typos in transformation name or repository directory path; pointing code at the wrong repository (dev vs prod); transformation deleted by another user; case-sensitivity differences in name lookup.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Trans.Exception.UnableToLoadTransformation
- TransMeta.Exception.DatabaseErrorOccuredReadingTransformatio…
- TransMeta.Exception.UnableToLoadTransformationInfoFromReposi…
- TransMeta.Exception.DatabaseErrorOccuredReadingTransformatio…
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e0a34ad154a6dadb.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java:633
//
RepositoryAttributeInterface attributeInterface =
new KettleDatabaseRepositoryTransAttribute( repository.connectionDelegate, transMeta.getObjectId() );
for ( LogTableInterface logTable : transMeta.getLogTables() ) {
logTable.loadFromRepository( attributeInterface );
}
if ( monitor != null ) {
monitor.subTask( BaseMessages.getString( PKG, "TransMeta.Monitor.SortingStepsTask.Title" ) );
}
transMeta.sortSteps();
if ( monitor != null ) {
monitor.worked( 1 );
}
if ( monitor != null ) {
monitor.done();
}
} else {
throw new KettleException( BaseMessages
.getString( PKG, "TransMeta.Exception.TransformationDoesNotExist" )
+ transMeta.getName() );
}
if ( log.isDetailed() ) {
log.logDetailed( BaseMessages.getString( PKG, "TransMeta.Log.LoadedTransformation2", transname, String
.valueOf( transMeta.getRepositoryDirectory() == null ) ) );
log
.logDetailed( BaseMessages.getString(
PKG, "TransMeta.Log.LoadedTransformation", transname, transMeta.getRepositoryDirectory().getPath() ) );
}
// close prepared statements, minimize locking etc.
//
repository.connectionDelegate.closeAttributeLookupPreparedStatements();
return transMeta;
} catch ( KettleDatabaseException e ) {
log.logError( BaseMessages.getString( PKG, "TransMeta.Log.DatabaseErrorOccuredReadingTransformation" )View on GitHub (pinned to f3058517a1)