英文:
Named parameter [XXX] is not registered with this procedure call
问题
我从Spring Boot调用一个过程。
遇到以下异常:
java.lang.IllegalArgumentException: 未向此过程调用注册命名参数[B]
我有这个实体类:
@Entity
@NamedStoredProcedureQuery(name = NamedStoredProcedure.MyProc, procedureName = Procedures.MyProc, resultClasses = MyProcResult.class, parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.A, type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.B, type = String.class)
})
public class CallProc{
.
.
}
我正在发送所需的参数:
StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createNamedStoredProcedureQuery(NamedStoredProcedure.MyProc);
publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
publishedSessionStoredProcedure.setParameter(ParameterName.B, b);
在过程中,也需要相同数量和类型的参数。
可能的原因是什么?
英文:
I am calling a procedure from Spring Boot.
Getting following exception:
java.lang.IllegalArgumentException: Named parameter [B] is not registered with this procedure call
I have this entity class:
@Entity
@NamedStoredProcedureQuery(name = NamedStoredProcedure.MyProc, procedureName = Procedures.MyProc, resultClasses = MyProcResult.class, parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.A, type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.B, type = String.class)
})
public class CallProc{
.
.
}
I am sending required parameters:
StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createNamedStoredProcedureQuery(NamedStoredProcedure.MyProc);
publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
publishedSessionStoredProcedure.setParameter(ParameterName.B, b);
In procedure, also same no and type of parameters are expected.
What can be the reason ?
答案1
得分: 10
我遇到了完全相同的问题,我选择使用'createStoredProcedureQuery'而不是'createNamedStoredProcedureQuery'。
尝试添加这些行:
.registerStoredProcedureParameter(ParameterName.A,String.class,ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B,String.class,ParameterMode.IN)
然后你的代码应该看起来像这样:
StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createStoredProcedureQuery(NamedStoredProcedure.MyProc,MyProcResult.class)
.registerStoredProcedureParameter(ParameterName.A,String.class,ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B,String.class,ParameterMode.IN);
publishedSessionStoredProcedure.setParameter(ParameterName.A,a);
publishedSessionStoredProcedure.setParameter(ParameterName.B,b);
对我来说,注册参数解决了问题,希望它对你也有效。
附言:
我还必须为我的对象添加SqlResultSetMapping(在你的情况下是MyProcResult)。
英文:
I had the same exact issue, I chose to use 'createStoredProcedureQuery' instead of 'createNamedStoredProcedureQuery'
Try adding these lines:
.registerStoredProcedureParameter(ParameterName.A, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B, String.class, ParameterMode.IN)
Then your code should look something like this:
StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createStoredProcedureQuery(NamedStoredProcedure.MyProc, MyProcResult.class)
.registerStoredProcedureParameter(ParameterName.A, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B, String.class, ParameterMode.IN);
publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
publishedSessionStoredProcedure.setParameter(ParameterName.B, b);
For me registering the parameter did the trick hope it'll work for you 2
P.S.
I also had to add SqlResultSetMapping for my object (in your case MyProcResult)
专注分享java语言的经验与见解,让所有开发者获益!
评论