hibernate/hibernate-orm · error · QueryException

Dialect [" + procedureCall.getSession().getJdbcServices().ge

Error message

Dialect [" + procedureCall.getSession().getJdbcServices().getJdbcEnvironment().getDialect().getClass().getName() + "] not known to support REF_CURSOR parameters

What it means

Error "Dialect [" + procedureCall.getSession().getJdbcServices().getJdbcEnvironment().getDialect().getClass().getName() + "] not known to support REF_CURSOR parameters" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/procedure/internal/JTDSCallableStatementSupport.java:63

		final StringBuilder buffer;
		final int offset;
		if ( functionReturn != null ) {
			throw new QueryException( "The jTDS driver does not support calling functions through the JDBC CallableStatement API" );
		}
		offset = 1;
		buffer = new StringBuilder( 9 + procedureName.length() + paramStringSizeEstimate ).append( "{call " );

		buffer.append( procedureName );

		if ( registrations.isEmpty() ) {
			buffer.append( '(' );
		}
		else {
			char sep = '(';
			for ( int i = 0; i < registrations.size(); i++ ) {
				final ProcedureParameterImplementor<?> parameter = registrations.get( i );
				if ( parameter.getMode() == ParameterMode.REF_CURSOR ) {
					throw new QueryException( "Dialect [" + procedureCall.getSession().getJdbcServices().getJdbcEnvironment().getDialect().getClass().getName() + "] not known to support REF_CURSOR parameters" );
				}
				buffer.append( sep );
				final JdbcCallParameterRegistration registration = parameter.toJdbcParameterRegistration(
						i + offset,
						procedureCall
				);
				if ( parameter.getName() != null ) {
					buffer.append( '@' ).append( parameter.getName() ).append( "=?" );
				}
				else {
					buffer.append( "?" );
				}
				sep = ',';
				builder.addParameterRegistration( registration );
			}
		}

		buffer.append( ")}" );

View on GitHub (pinned to fad1729dce)

Solutions

  1. Use a dialect that supports REF_CURSOR (e.g. OracleDialect, PostgreSQLDialect) instead of the jTDS/Sybase dialect.
  2. Register the parameter as a normal OUT parameter instead of REF_CURSOR.

When it happens

Trigger: A REF_CURSOR parameter is registered on a dialect/driver without REF_CURSOR support.

Common situations: Porting stored procedure code between databases or using a driver (e.g. jTDS, some Sybase setups) lacking cursor support.


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/ab9bda3cab09ab8c. Report an issue: GitHub.