{"record":{"id":"82e40f2cf937afda","repo":"pentaho/pentaho-kettle","slug":"transdependency-exception","errorCode":null,"errorMessage":"TransDependency.Exception.UnableToLoadTransformationDependency","messagePattern":"TransDependency\\.Exception\\.UnableToLoadTransformationDependency","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java","lineNumber":1072,"sourceCode":"\n  public TransDependency loadTransDependency( ObjectId id_dependency, List<DatabaseMeta> databases ) throws KettleException {\n    TransDependency transDependency = new TransDependency();\n\n    try {\n      transDependency.setObjectId( id_dependency );\n\n      RowMetaAndData r = getTransDependency( id_dependency );\n\n      if ( r != null ) {\n        long id_connection = r.getInteger( \"ID_DATABASE\", 0 );\n        transDependency.setDatabase( DatabaseMeta.findDatabase( databases, new LongObjectId( id_connection ) ) );\n        transDependency.setTablename( r.getString( \"TABLE_NAME\", null ) );\n        transDependency.setFieldname( r.getString( \"FIELD_NAME\", null ) );\n      }\n\n      return transDependency;\n    } catch ( KettleException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransDependency.Exception.UnableToLoadTransformationDependency\" )\n        + id_dependency, dbe );\n    }\n  }\n\n  public void saveTransDependency( TransDependency transDependency, ObjectId id_transformation ) throws KettleException {\n    try {\n      ObjectId id_database =\n        transDependency.getDatabase() == null ? null : transDependency.getDatabase().getObjectId();\n\n      transDependency.setObjectId( insertDependency( id_transformation, id_database, transDependency\n        .getTablename(), transDependency.getFieldname() ) );\n    } catch ( KettleException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransDependency.Exception.UnableToSaveTransformationDepency\" )\n        + id_transformation, dbe );\n    }\n  }","sourceCodeStart":1054,"sourceCodeEnd":1090,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java#L1054-L1090","documentation":"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.","triggerScenarios":"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.","commonSituations":"Stale ObjectId after repository cleanup/re-index, dependency row referencing a deleted database connection, or DB access failure during dependency load.","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"],"exampleFix":"// before\nTransDependency dep = delegate.loadTransDependency(depId, databases);\n\n// after\ntry {\n  TransDependency dep = delegate.loadTransDependency(depId, databases);\n} catch (KettleException e) {\n  logError(\"Cannot load dependency \" + depId + \": \" + e.getCause(), e);\n}","handlingStrategy":"try-catch","validationCode":"// Java: confirm dependency id resolves before loading\nObjectId depId = ...;\nboolean exists = repository.getDatabaseMeta() != null; // plus direct SQL check:\n// SELECT COUNT(*) FROM R_DEPENDENCY WHERE ID_DEPENDENCY = ?","typeGuard":null,"tryCatchPattern":"try {\n  TransDependency dep = delegate.loadTransDependency(depId, databases);\n} catch (KettleException e) {\n  log.error(\"Dependency \" + depId + \" unreadable: \" + e.getCause(), e);\n  dep = null; // handle missing dependency gracefully\n}","preventionTips":["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"],"tags":["database","repository","kettle","dependency"],"backgroundTag":"record-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}