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
- Verify the id_dependency exists in R_DEPENDENCY (query the repository directly)
- Check the referenced database connection still exists in R_DATABASE
- Review the chained cause exception for the SQL-level error
- 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
- Never cache ObjectIds across repository re-creations; reload ids from the repository
- Delete a transformation's dependencies together with the transformation
- Validate referenced DatabaseMeta ids before loading dependencies
- Query R_DEPENDENCY directly when debugging stale ids
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
- TransDependency.Exception.UnableToSaveTransformationDepency
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
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)