pentaho/pentaho-kettle · error · KettleException

Unable to save job entry of type 'trans' to the repository…

Error message

Unable to save job entry of type 'trans' to the repository for id_job=

What it means

Thrown by JobEntryTrans.saveRep when persisting a Transformation job entry's attributes (including per-parameter rows and 'pass_all_parameters') to the repository fails with a KettleDatabaseException. It means the repository rejected the write. The original database exception is wrapped as the cause.

Solutions

  1. Verify the repository database is reachable and writable
  2. Check the wrapped KettleDatabaseException for the specific failing attribute/SQL error
  3. Shorten transformation names/paths that exceed column limits
  4. Repair/upgrade the repository schema and retry the save
Defensive patterns

Strategy: try-catch

Validate before calling

if ( entry.getTransname() != null && entry.getTransname().length() > 255 ) { throw new IllegalStateException( "Transformation name too long for repository" ); }

Try / catch

try { entry.saveRep( rep, metaStore, id_job ); } catch ( KettleException e ) { log.error( "Failed saving trans entry for job " + id_job, e.getCause() ); throw e; }

Prevention

When it happens

Trigger: Calling saveRep when the repository database is unavailable, a parameter row insert violates constraints, column sizes are exceeded by long transformation names/paths, or the connection drops mid-save.

Common situations: Long transformation paths exceeding repository column widths; read-only DB credentials; connection pool exhaustion during large job saves; corrupted repository tables after failed upgrades.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/trans/JobEntryTrans.java:587

          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "argument", arguments[ i ] );
        }
      }

      // Save the parameters...
      if ( parameters != null ) {
        for ( int i = 0; i < parameters.length; i++ ) {
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "parameter_name", parameters[ i ] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "parameter_stream_name", Const.NVL(
            parameterFieldNames[ i ], "" ) );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "parameter_value", Const.NVL(
            parameterValues[ i ], "" ) );
        }
      }

      rep.saveJobEntryAttribute( id_job, getObjectId(), "pass_all_parameters", passingAllParameters );

    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException(
        "Unable to save job entry of type 'trans' to the repository for id_job=" + id_job, dbe );
    }
  }

  @Override
  public void clear() {
    super.clear();

    specificationMethod = ObjectLocationSpecificationMethod.FILENAME;
    transname = null;
    filename = null;
    directory = null;
    arguments = null;
    argFromPrevious = false;
    execPerRow = false;
    addDate = false;
    addTime = false;
    logfile = null;

View on GitHub (pinned to f3058517a1)