Именованный параметр [XXX] не зарегистрирован с этим вызовом процедуры - PullRequest
0 голосов
/ 10 апреля 2020

Я вызываю процедуру из Spring Boot. Получение следующего исключения:

java.lang.IllegalArgumentException: Named parameter [B] is not registered with this procedure call

У меня есть этот класс сущности:

@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);

В процедуре также тоже нет и Тип ожидаемых параметров.

В чем может быть причина?

1 Ответ

0 голосов
/ 28 апреля 2020

У меня была точно такая же проблема, я решил использовать '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);

Для меня при регистрации параметра была хитрость, надеюсь, он будет работать для вас 2

PS Мне также пришлось добавить SqlResultSetMapping для моего объекта (в вашем случае MyProcResult)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...