私はこのようなマッパーメソッドを持っています:
@InsertProvider(class=com.something.class, method="doSomething")
public void insertSomething(Set<Integer> set, int guideId);
そして、何かのクラスで、私はメソッドを持っています:
public String doSomething(Set<Integer> set, int guideId){
// do something and returna a query
}
それは私にエラーを与えます:
SqlProviderのSqlSourceの作成中にエラーが発生しました。メソッド'doSomething'がSqlProvider'com.something.class'に見つかりません
ProviderSqlResource
問題をデバッグしたとき、のコンストラクターで、noの場合にこの例外がスローされることがわかりました。引数のは2 or more
です。彼らがそうする理由は思いつかない。回避策は何ですか?
方法は次のとおりです。
public ProviderSqlSource(Configuration config, Object provider) {
String providerMethodName = null;
try {
this.sqlSourceParser = new SqlSourceBuilder(config);
this.providerType = (Class<?>) provider.getClass().getMethod("type").invoke(provider);
providerMethodName = (String) provider.getClass().getMethod("method").invoke(provider);
for (Method m : this.providerType.getMethods()) {
if (providerMethodName.equals(m.getName())) {
if (m.getParameterTypes().length < 2
&& m.getReturnType() == String.class) {
this.providerMethod = m;
this.providerTakesParameterObject = m.getParameterTypes().length == 1;
}
}
}
} catch (Exception e) {
throw new BuilderException("Error creating SqlSource for SqlProvider. Cause: " + e, e);
}
if (this.providerMethod == null) {
throw new BuilderException("Error creating SqlSource for SqlProvider. Method '"
+ providerMethodName + "' not found in SqlProvider '" + this.providerType.getName() + "'.");
}
}