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

  1. Check existence first with repository.findTransformation(name, directory) or verify transMeta.getObjectId() != null before loading.
  2. Confirm the repository directory passed to loadTransformation is the one actually containing the transformation.
  3. 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

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


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)