mybatis/mybatis-3 · error · BuilderException
Error creating SqlSource for SqlProvider. ProviderContext fo
Error message
Error creating SqlSource for SqlProvider. ProviderContext found multiple in SqlProvider method ({providerTypeName}.{methodName}). ProviderContext can not define multiple in SqlProvider method argument. What it means
Error "Error creating SqlSource for SqlProvider. ProviderContext found multiple in SqlProvider method ({providerTypeName}.{methodName}). ProviderContext can not define multiple in SqlProvider method argument." thrown in mybatis/mybatis-3.
Source
Thrown at src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java:150
throw e;
} catch (Exception e) {
throw new BuilderException("Error creating SqlSource for SqlProvider. Cause: " + e, e);
}
if (candidateProviderMethod == null) {
throw new BuilderException("Error creating SqlSource for SqlProvider. Method '" + candidateProviderMethodName
+ "' not found in SqlProvider '" + this.providerType.getName() + "'.");
}
this.providerMethod = candidateProviderMethod;
this.paramNameResolver = new ParamNameResolver(configuration, this.providerMethod, mapperType);
this.providerMethodParameterTypes = this.providerMethod.getParameterTypes();
ProviderContext candidateProviderContext = null;
Integer candidateProviderContextIndex = null;
for (int i = 0; i < this.providerMethodParameterTypes.length; i++) {
Class<?> parameterType = this.providerMethodParameterTypes[i];
if (parameterType == ProviderContext.class) {
if (candidateProviderContext != null) {
throw new BuilderException(
"Error creating SqlSource for SqlProvider. ProviderContext found multiple in SqlProvider method ("
+ this.providerType.getName() + "." + providerMethod.getName()
+ "). ProviderContext can not define multiple in SqlProvider method argument.");
}
candidateProviderContext = new ProviderContext(mapperType, mapperMethod, configuration.getDatabaseId());
candidateProviderContextIndex = i;
}
}
this.providerContext = candidateProviderContext;
this.providerContextIndex = candidateProviderContextIndex;
}
@Override
public BoundSql getBoundSql(Object parameterObject) {
SqlSource sqlSource = createSqlSource(parameterObject);
return sqlSource.getBoundSql(parameterObject);
}
View on GitHub (pinned to 008069adb1)
Solutions
- Remove the extra ProviderContext parameter so the provider method declares at most one.
- If multiple contexts are needed, pass the required data through regular method parameters instead of multiple ProviderContext arguments.
When it happens
Trigger: Thrown at src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java:150 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of mybatis/mybatis-3@008069adb1 (2026-08-14).
Data as JSON: /api/errors/d8fae78ef9526c11.
Report an issue: GitHub.