pentaho/pentaho-kettle · error · KettleException

TransDependency.Exception.UnableToLoadTransformationDependen…

Error message

TransDependency.Exception.UnableToLoadTransformationDependency

What it means

Thrown by loadTransDependency() when loading a single transformation dependency (a database-to-table/field dependency) from the repository fails with a KettleException. The dependency ObjectId is appended to the message to identify the failing record. Low-level errors are chained as the cause.

Solutions

  1. Verify the id_dependency exists in R_DEPENDENCY (query the repository directly)
  2. Check the referenced database connection still exists in R_DATABASE
  3. Review the chained cause exception for the SQL-level error
  4. Re-save the transformation so dependency rows are regenerated

Example fix

// before
TransDependency dep = delegate.loadTransDependency(depId, databases);

// after
try {
  TransDependency dep = delegate.loadTransDependency(depId, databases);
} catch (KettleException e) {
  logError("Cannot load dependency " + depId + ": " + e.getCause(), e);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Java: confirm dependency id resolves before loading
ObjectId depId = ...;
boolean exists = repository.getDatabaseMeta() != null; // plus direct SQL check:
// SELECT COUNT(*) FROM R_DEPENDENCY WHERE ID_DEPENDENCY = ?

Try / catch

try {
  TransDependency dep = delegate.loadTransDependency(depId, databases);
} catch (KettleException e) {
  log.error("Dependency " + depId + " unreadable: " + e.getCause(), e);
  dep = null; // handle missing dependency gracefully
}

Prevention

When it happens

Trigger: Calling loadTransDependency(id_dependency, databases) with an id whose R_DEPENDENCY row cannot be read, or when the referenced database meta cannot be resolved, or the repository query itself throws.

Common situations: Stale ObjectId after repository cleanup/re-index, dependency row referencing a deleted database connection, or DB access failure during dependency load.

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


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/82e40f2cf937afda. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java:1072

  public TransDependency loadTransDependency( ObjectId id_dependency, List<DatabaseMeta> databases ) throws KettleException {
    TransDependency transDependency = new TransDependency();

    try {
      transDependency.setObjectId( id_dependency );

      RowMetaAndData r = getTransDependency( id_dependency );

      if ( r != null ) {
        long id_connection = r.getInteger( "ID_DATABASE", 0 );
        transDependency.setDatabase( DatabaseMeta.findDatabase( databases, new LongObjectId( id_connection ) ) );
        transDependency.setTablename( r.getString( "TABLE_NAME", null ) );
        transDependency.setFieldname( r.getString( "FIELD_NAME", null ) );
      }

      return transDependency;
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransDependency.Exception.UnableToLoadTransformationDependency" )
        + id_dependency, dbe );
    }
  }

  public void saveTransDependency( TransDependency transDependency, ObjectId id_transformation ) throws KettleException {
    try {
      ObjectId id_database =
        transDependency.getDatabase() == null ? null : transDependency.getDatabase().getObjectId();

      transDependency.setObjectId( insertDependency( id_transformation, id_database, transDependency
        .getTablename(), transDependency.getFieldname() ) );
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransDependency.Exception.UnableToSaveTransformationDepency" )
        + id_transformation, dbe );
    }
  }

View on GitHub (pinned to f3058517a1)