我正在从 Spring Boot 调用一个过程。得到以下异常:
java.lang.IllegalArgumentException: Named parameter [B] is not registered with this procedure call
Run Code Online (Sandbox Code Playgroud)
我有这个实体类:
@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{
.
.
}
Run Code Online (Sandbox Code Playgroud)
我正在发送所需的参数:
StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createNamedStoredProcedureQuery(NamedStoredProcedure.MyProc);
publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
publishedSessionStoredProcedure.setParameter(ParameterName.B, b);
Run Code Online (Sandbox Code Playgroud)
在程序中,也期望参数的编号和类型相同。
可能是什么原因?
我有同样的问题,我选择使用“createStoredProcedureQuery”而不是“createNamedStoredProcedureQuery”
尝试添加这些行:
.registerStoredProcedureParameter(ParameterName.A, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B, String.class, ParameterMode.IN)
Run Code Online (Sandbox Code Playgroud)
那么你的代码应该是这样的:
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);
Run Code Online (Sandbox Code Playgroud)
对我来说,注册参数成功了,希望它对你有用 2
PS我还必须为我的对象添加SqlResultSetMapping(在你的情况下是MyProcResult)
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |