命名参数 [XXX] 未在此过程调用中注册

Nin*_*ale 1 java spring-boot

我正在从 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)

在程序中,也期望参数的编号和类型相同。

可能是什么原因?

Yar*_*n Y 5

我有同样的问题,我选择使用“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)